在开始做第二张卡片的第一天,仝老师跟我谈了一下我第一张卡片的完成情况。
主要有以下几个问题:
1.在写代码的时候,我的很多变量名函数名字起的很奇怪。变量名字和函数名字应该尽量朝业务语言发展,尽量做到代码即文档。
2.不要总是copy-paste,在不断重复的做同样工作的时候,就应该意识到有问题了。消除重复很重要!(我觉得不只是对写程序来说有道理)
3.有些地方能够用参数传递解决问题的,不要都用localStorage解决。应该尽量减少全局变量的使用。
4.模块化,把一些可以抽取出去的代码单独编写成函数模块化。
5.保持工作区的neat,改哪个文档里面的程序就开哪个文档。不要一次性打开好几个文档改代码。
6.尽量想办法降低圈复杂度,也就是减少if,for,switch的使用。
7.利用好github库。细化工作,及时提交。Agile思想:小步快跑,清晰思路。
8.对于controller文档,尽量每一行都是$scope,调用函数实现功能,保持代码整洁。
带着大胡子叔叔提的建议,我把这次写第二张卡片的重心放在了尽量解决以上问题。在写程序之前,给自己写了一个提纲,每一个阶段该完成什么,一步步去实现第二张的要求。
完成第二张卡片的主要思路:
在程序中一共建立了三个全局变量,通过localStorage在各个controller之间使用,分别是activity_list(活动列表),current_activity(当前进入的活动报名页面),current_registration(当前进行中的活动).
activity_list中的每个元素一共有五个key:name,activity_id,participants,state..其中state的作用是用来表示活动的状态,state=1代表活动从来没有开始过,state=2代表报名活动正在进行中,state=3代表报名活动已经结束。participants里面存的是该活动的报名者的信息。
current_activity是直接从activity_list中抽取的。当点击一个页面的时候,这个活动中的所有信息都将被传到current_activity中。
current_registration中一共只有两个key,一个是id,一个是state。id代表了他的活动编号。state代表的是活动的状态。
由这三个变量,在程序间的相互传递就可以实现第二张卡片的要求。
具体来说,就是在活动列表中点击相应的活动,将该活动的信息传给current_activity。由current_activity控制在报名页面的显示。在报名页面如果对current_activity的值有改动的话,再调用一个自己编写的同步函数,将current_activity的变化实时的i改写到activity_list上面。
current_registration用来控制开始按钮的变化,报名人数的显示,和短信的收发,还有颜色的变化。
activity_list主要起一个存储活动信息的作用,保障活动的信息在各个页面之间实时的变化和显示。
我的问题:
1.在给自己列提纲的时候,对整张卡片的要求没有一个比较宏观的概念。所以在完成第二张卡片的时候,林林总总改了4次数据结构。
在大学上课的时候,老师就有讲过,一个程序,代码不是最重要的,算法才是core。所以,在写程序的时候,花在思考上面的时间一定比写程序的时间多。忌想到一点写一点,因为写到后面,很可能造成写一句后面改一次前面的情况。我这一次就是这样,在一开始给自己定计划的时候考虑的很不全面。导致写到后面,完成一个新的阶段就要改一次数据结构。在写的过程中还是很有挫败感的,有一种学一点新东西就掉一些旧知识的无力感。希望在做下一张卡片的时候吸取这一张的教训。
2.在写的时候,代码真的很丑。每一次都要在写完之后单独花时间将代码美化。
3.程序的完备性还是有问题,总是会考虑漏一些情况,然后又再想办法补救。
4.再该程序前,也要想好了再下手改。有好几次都把正确的误改错了。
收获:
1.在完成这张卡片的过程中,仔细的研究了一下js中对字符串的操作。意外的学到了一个去掉字符串里面所有空格的函数
replace(/[ ]/g,"")
2.学会了怎么样去刷新页面的数据。
var page_jump_or_not = document.getElementById('participant');//这个participant需要在该页面的html标签中设置id if (page_jump_or_not) { var scope = angular.element(page_jump_or_not).scope(); scope.$apply(function () { scope.data_refresh(); //这段函数代码到相应的controller里去写 }) }
3.对于{{}}在html页面中的应用有了新的理解。知道了{{}}也可以用在标签里。