工作半年的总结——写程序
1,不要把什么事情都要让程序来完成。
在做数据库相关的程序时,不要忽视数据库服务器的强大功能,有些在程序中难以实现的功能,利用数据库本身的功能就很好实现。我一般的做法是将数据库中的表装入程序中的数据集或是记录集中,再对这个集进行操作,操作完成把它更新到数据库中去。但是,这样做有很多不足,1,很耗资源,尤其对于PDA,它本身的资源就很紧缺。2,逻辑处理非常麻烦,比如要查找一个记录,就的写循环语句,遍历,判断,完成之后,还要将这个集中的标志设置成初始状态(一般需要这样,除非这次的操作的结果在后续操作中用到)。
现在改变一下,将对数据库的复杂的繁琐的操作写成一个个存储过程或SQL语句,在相应的操作时,调用这些存储过程或语句就行。这样的改变很好,节省许多空间(代码写的少)和资源。
2,将界面控件状态的改变集中写在一起
一般用户界面上有不少空间,textbox,button,label等等,在用户操作时这些控件的状态要随着用户的操作作出相应的变化,我经常遇到这样的问题,而且处理起来很麻烦,更难受的问题时有时候这些状态的设置会发生冲突,甚至一些控件状态的确定关系到别的控件当前的状态,这样一来很是麻烦。现在我把对控件状态的设置都写在一个函数中formRefresh,这样每次需要设置界面状态时就调用这个函数就行了。当然在写这个函数之前需要确定出界面的状态到底有多少种,分别用什么样的状态标志来确定。
使用这个函数,到后来它给我节省了很多时间,把我从捣鼓复杂的界面状态中解放了出来,使我专注于最重要的逻辑问题。但是,它也有很多不足,首先,耗资源,就是每改一个小的地方都需要调用它,可能会使全部的控件都设置一次状态;第二,这个函数不是万能的,不是调用它所有的状态问题都解决了,还需要其他的辅助设置,比如在集中设置状态时(调用formRefresh函数),会发生冲突,像设置控件焦点的问题,会出现你争我抢的现象。
3,学习前辈们的经验和代码
我写这个PDA程序时有前辈们写的类似的程序,以前也看过,但是没仔细看,许多地方不明白就过去了,等自己写了一阵之后,发现自己辛辛苦苦研究出来来东,人家早就在用。所以没必要浪费大量的时间自己琢磨研究,开始之前先看看以前的程序,静下心来学习一下。
4,画出图纸
我不会画UML图,等高深的图,只是能随便用笔画画,但这也很好,我把要处理的过程全画出来,什么时候进行什么样的操作,由谁来操作都简单的标出来,没想到它对后来的开发有很大的帮助,我觉得直接面对代码很容易晕,迷糊。想逻辑时看着图,看代码舒服的多,要改变一个逻辑或设计,先改图,改完好啊好看看,觉得没问题再改相应的代码,这样可能比较好。当然这也没有严格的顺序区分,许多事情都是相符相重的,相互影响,共同进步的,不可能觉得没问题的图就是完美的,也许很快在写代码时就发现他不对。
另外,我比较爱用纸和笔画图,觉得容易表达出自己的想法,但是,我在不断的改掉这个习惯,改用电子版的,这样有很多好处,就不多说了,用纸和笔只是辅助,不如在捣鼓不清的时候,在纸上随便画画,帮助自己理清头绪。最后,不能依靠这种不正规的画图方式,在工作中将优秀的正规的画图方式不断的引用,这样才有发展前途。两个字还是:学习。
5,使用表驱动法精简代码
我的程序中,一个textbox要求的输入字符是数字和一些键盘上有的字母,其他的不能输入,这样就得在这个textbox的keypress事件中写一个比较复杂的判断语句,还有,在日后可能要加入新的能输入的键,或是去掉一些没必要的键(即让这些键不能输入),这样给判断增加了不少的难度,和复杂度,用成套的if else还是用swich,不管用什么都挺复杂的。我从《代码大全》中看到了关于表驱动法的介绍,于是在这样的判断中就用上了。先建立一个整数数组KeyIndex(1 to 144)(这样的写法是VB,其他的语言也没什么差别,可能存在的问题就是数组下标的问题,待会再说),初始化数组元素的值都是0,这个数据用来表示键盘上的144个键,比如KeyIndex(65),代表A,KeyIndex(48)代表0,等等。现在需要那个键能输入,就将那个键对应的ASCII码为数组下标的元素的值设置成1,就是 KeyIndex(49)=1,即将2键设置成可用。这样在keypress事件中只写一个判断代码,就搞定了,
if KeyIndex(KeyASCii) <> 1 then
KeyASCii=0
endif
哈 相当简洁。
如果需要加入新的可以输入的键或是去掉一些可以输入的键,问题只是改一改数组元素中0和1就行了,其他的不用动,这样很省时间,也比较松。
现在说一下数组下标的问题,在c++、c#、Java等一些语言中,数组的下标是从0开始的,但是键盘上没有哪个键的键值是0,所以KeyIndex(0)是不能用的,还有在这样的语言中有一个数组是int(20),那么它的元素只能是int(0)到int(19),所以在这样的应用中KeyIndex的定义要写成KeyIndex(145)。
6,没有解决的问题
虽然有的到的,但是老是觉得不太踏实,毕竟是自己的一方感慨,有时候真不知道该学些什么,不知道从哪里去学,很苦恼。对于上面的问题我觉得不是说好就非常好的,只是在特定的场合好使罢了。对于使用各种集还是使用数据库本身的特性,我没有很深刻的见解,我想学习想摸索,想得到一个很好的答案,说了些废话,就一句话:对这些,我不懂。还有对界面的设置,我觉得有很好的办法,你看看Word,再看看随便的什么操作系统,状态多么复杂,人家怎么就处理的很好呢?我想学习。现在工作了半年,觉得学习对 我们这些人是最重要的。