概述
个人版机房收费系统是第一次运用面向对象的思想做出来的项目,使用的编程语言是VB.net,项目工作的整个过程如下。
开发过程
数据库设计
首先开始的是数据库的设计,几个阶段就要数这个花时最长了,主要原因是自己在这一块松懈了,弄得自己由原先计划的先紧后松,变成了现在的先松后紧,可悲。
在这一块,运用了显式事务、临时表、存储过程、触发器、视图、游标等技术,虽然最终开发的应用程序并没有运用那么多,但是在数据库设计的时候,自己还是练了一练手。下面说一说这个阶段给我留下深刻的事情。
本次系统想要实现数据修改有备份的操作,也就是说,修改A表之前,要先把A表的所有信息备份到B表,在这里问一下,你会怎么做的呢?是不是想着先把A表相应记录信息取出来,然后在加上B表所特有的字段,再一起插入到B表呢,这种方法当然可以,但不是我想要说的方法。我们可以通过分析知道A表和B表里的字段几乎没有什么差别,那么能不能直接将A表相应的记录插入到B表中,你可以会说,A表和B表有不同字段,不能直接插入,是的,那么如果我们把A表和B表的字段都设为一样的话,不就可以直接复制了吗?我说的意思是说在A表中加入B表特有的字段,然后,A表相应记录就可以直接Copy到B表里了,当然,这种方法也是有些弊端的,具体采用什么方法,根据情况而定。
在应用程序中不能真实的删除数据库中的数据,只能修改特定字段的值,来达到假删除的目的,但是,数据库管理员可以通过登录数据库管理系统直接删除数据,为了使删除的信息能够更加彻底,也就是说,删除A表中的记录的同时,也把B表中所有和A表该记录相关的记录也删除了,此时运用了删除触发器,这个时候需要小心了,要考虑到,如果删除A表的记录是多条时应该怎么写相应的触发器,此点的扩展,删除A表记录的同时,删除B表与A表相对应的记录,且在删除B表记录的同时,删除C表与之B表相对应的记录,这个时候要考虑到B表要删除的记录可能会是多条的情况,我们可以通过创建游标的方法进行解决这个问题。
这个阶段的其他事,像显示事务的保存点,临时表、视图和表的关系等,都是可以看一看的,在这里就不详细的说了。
3层设计
这个阶段的步骤是先画了一下UML的图,然后开始功能代码的实现,本次的系统的设计没有加设计模式和SQLHelper,就是单纯的3层设计,这个阶段还算很顺利。下面是相应的总结。
3层设计中的每一层都不知道其他层的具体信息,也就是说,B层和D层是不同的人在编写代码,这个就会设计到一个问题,B层如何知道自己调用D层方法是否成功呢?所以,在层和层之间一般都要有返回值。
重构
3层设计的功能全部实现后,让自己的导师看了一下,导师给了很多宝贵的建议,知道自己的不足后,就开始进行系统的重构,重构的过程中加了一个设计模式,对面向对象对象的思想有了进一步的理解。下面是这个阶段让自己影响深刻的事情。
之前3层设计和数据库的连接等代码的书写,出现了大范围的重写,等接触到SQLHelper的时候有了切身的体会,SQLHelper的想法太好了,把重复性的东西抽象出来,写成具体的一个方法,最大限度的减少相同功能代码的重写,增强代码的复用性,太厉害。SQLHelper的编写可以作为D层的一个类,也可以作为单独的一个项目,视情况而定,作为单独的一个项目的话,对后续该功能块升级对系统的影响更小,使升级更简单。SQLHelper类中要运用重载的方式,也就是说SQLHelper类中可以有多个相同的方法名,但是各个之间参数个数或参数类型要不同。SQLHelper类里面大致的分成两中类型,查询是一类型(A),增、删和改是一类型(B),查询或B可以继续分,可以有不同命令类型(SQL语句、存储过程等)的执行,可以有无命令参数的执行。
在重构这个阶段所加的设计模式就一个抽象功能+反射,本想加外观模式的,可是一想,认为3层设计本身就是一个外观模式,我们可以把B层的方法当做对外提供的简单接口(也就是说B层里的一个方法就是一个简单的用例),B层类里面的一个方法一般都是D层类里面多个方法的组合,所以,没有必要加外观模式。运用抽象工厂+反射的设计模式的过程中,自己对配置文件有了一些了解,对添加引用有了一些了解,VB.net开发的项目要想运用其他的组件,我们必须告诉该应用程序那个组件的位置,也就是让项目能够唯一的确定该组件,这样才能够应用,在运用反射时,我们要知道,其实我们并没有添加具体D层的引用,所以,在UI的相应文件夹下并没有相应的dll,这样的话,我们就不能正常的运行程序了,解决的方法就是把相应的dll添加在UI的相应文件夹里,添加的方法有很多,自己可以尝试一下。
验收
打包完成后,就让导师给验收系统了,在验收的过程中师哥们给了很多金玉良言,当然,在上面的几个阶段师哥们也给了我很大的帮助。一下是自己的总结
字段或方法不要写“_”,要为编程人员的方便着想;文档中颜色的运用应用分类,每种色应代表一类,而不是你觉得这个重要就都用同一种色了,应该体现出这个重要的种类,要知道写文档不是给自己看的,是给其他的程序员看的,要站在读者的角度写;字段或方法名中都重复的单词可以省略不写,要知道,都有和都没有是一样的;和用户谈需求的时候,把用户当成猴,想着他的需求是各种变,用户使用软件时,要把用户当猪看,让猪都会使用你的软件,所以,功能代码编写时,要最大限度的体现出可扩展性,功能代码实现后,要最大限度的体现出软件的可用性,能不让用户操作的,就不让用户操作,还有一点就是界面的灵活性,让界面随心而动。
总结
把学习智慧当成学习过程中的重点。