学生信息管理平台开发心得

 

这个项目的开发对我来说是一个极大的挑战。整个项目的复杂性对我来说还是第一次,而且自己的工作贯穿了整个软件开发的整个流程。在这个漫长的过程中也走了很多弯路,当然最后系统的顺利完成对我来说是个极大的欣慰和鼓舞。在这里我也把我整个项目的心得写下来。

 

开发软件是团队的工作

       企图一个人进行软件开发那绝对是件自虐的事情,除非那是个天才。

       开发工作不仅仅是写代码,还包括需求分析,软件设计,软件测试等,写代码也分为写前端(视图层),后端(业务逻辑层,数据持久层)代码,两者代码是截然不同的,前台使用的语言可能又包括htmljspjavascript等等。如此多的工作由一两个人完成,这的确是件很不容易的事情。

       所以在一个项目还是应该由一个项目组进行开发,在这个团队中每个人都会用所专长,首先必须有人能够有着较强的沟通能力、语言表达能力、耐性与客户进行沟通,并写成需求分析文档,并且需要与向团队中的每一个人介绍整个系统的应该要实现的功能,团队根据需求分析讨论出实现功能的最佳方法,然后必须有人熟悉将要使用在项目中的开发技术以及应用框架,并且有着类似的开发经验,由他对整个系统的开发进行框架构造,分清层次模块,以对团队其它成员进行分工。然后团队中熟悉对应工作的开发者专心从事于自己熟悉的工作。

       比如3个人是一个典型的小团队,那么这三个人之间也应该根据特长进行分工,首先应该定义好一个好的开发框架,定义好层次之间的接口,并由三个人分别予以实现,最后拼装在一起。那么对于软件工程流程中的分工,我认为可以共同进行需求分析,软件测试,软件设计工作。或者在编写代码时,其中一位开发者负责项目进程的控制以及软件测试。

       团队的开发工作是很有必要的,一个优秀的团队才能保证写出有质量的代码,有质量的软件项目。

 

写代码不能光靠脑子

以前写代码总是把思路都记在脑子里面,但是在做这个项目的时候,脑子的容量实在不够了,整个项目分为很多模块,而模块之下也有很多的子模块,模块与模块之间,业务逻辑层,视图层,数据持久层之间都应该存在有很多接口。

在一开始写管理活动模块时,考虑到这个模块接口及方法时就忽略了其他模块的接口方法或者其他功能在这个模块中的应用,导致在写的代码的复用性不强,不易于以后的修改。导致再定义该模块其他功能的时候必须重新写一段代码来实现新的功能。当一个模块中的方法定义很多时,整个模块的结构就会显得很杂乱。

在写管理奖学金管理模块时,虽然整个流程与活动模块的流程相近,但是由于整个模块过于复杂,使得脑子里面对于活动模块的整个结构很是杂乱,已经不能够将整个设计迁移到新的类似模块中。

所以在发现这个问题之后,就决定将整个活动模块重整了一遍,理清结构,接下来按照这个结构类似定义其他的几个模块,很明显开发这几个模块非常的迅速,而且不存在什么逻辑上的问题。

所以不要过分地相信自己的脑子,必须先有设计然后才可以进行编码,虽然之前增加了这么一个步骤,但是,非常有利于有效率的开发,有利于写出有质量的代码。

 

编码规范很重要

写了很多代码之后,出现了很多作用域不同的变量以及方法,再回头查看对变量以及方法的调用时,因为命名并不统一,比如管理活动信息模块以及管理奖学金信息模块中查看自己的列表功能,业务逻辑层所使用的页面文件一个是activity.jsp,另外一个是scholarship_home.jsp,很明显两个页面文件的文件名所表达的意义很难看出是一致的。另外有意个例子活动信息模块中的actapply.jsp,和奖学金模块中的schapply.jsp,从文件名的结构看,两个信息所展现的功能是一致的。如此定义才能方便后续的开发,重构工作,以及项目交付之后的维护升级工作。

特别是一个团队中每一个程序员的编码风格都是不一致的,而团队工作中程序员之间的工作是有交叉的,包括之后可能出现的程序员之间的工作顶替,或者日后的维护升级工作,整个项目所使用的编码会有很多风格,这样会很不利于后续的开发维护工作。

所以在一个团队形成之初,就应当定义一整套的编码规范,哪怕是一个人进行开发,都应该明确自己的编码规范,特别是命名标准。每一个成员都应当按照编码规范进行编码。

 

重构的是很有必要的

一次设计出完美的结构或者写出完美的代码,那是不可能的。在开发过程中,当发现现有的设计已经不满足后续的开发需求,或者设计明显存在不合理之处。在这个时候就必须对代码进行重构。

不要舍不得之前写代码花费的精力,之间的过程只不过是给自己增加一段新的反面经验。对代码进行重构之后,将会很有利于后续的开发。有利于给系统形成一个良好的体系结构,这样也有利于性能的控制。

重构的过程同样也是对代码进行进一步检查的过程,在这个过程中,可以发现一些新的不合理的地方,进一步减少系统发生错误的可能性。

 

项目的开发计划很重要

一个项目不是几天就能开发完毕的,整个开发过程一定要有一个好的计划,第一步做什么,第二步做什么。比如a模块需要定义接口123b模块需要定义接口456,在开发过程中应该要避免按照自己的意愿顺序定义这一批接口,不能想到哪就做到哪,如果是这样进行操作,很有可能遗漏了某个接口的定义。而且如此安排即脑子里面没有好的设计模式,结构杂乱,当然不能写出一个高质量的接口。

所以在项目的开始即应该制定详细的开发计划,在每一个子模块开发之前也应该针对子模块中的逻辑制定详细的开发计划。在开发过程中,严格的按照开发计划进行定义。这样才能够有效率地进行开发。

 

 

写代码之前一定要有一个好的设计框架

       在开发一个项目的过程中,最好的参考资料不是成堆的技术图书,而是一个良好的设计文档。

在一个项目中最重要的应该是这个设计框架,或许一个小规模的项目,不需要重构或者制定详细的开发计划而避免增加开发的成本。但是一定要有一个好的设计框架。

比如整个系统的层次分割,模块的划分,层次之间的接口,模块之间的调用,这些都是应该在设计中体现的。这些也是进行团队分工的基础。根据框架定义好接口之后,就可以将工作分给团队中其他的成员开发。一个好的框架有利于制定项目的开发计划,以及测试计划。这样才能够进行有效率的团队开发。

设计文档也是节省脑力活动的重要工具。

比如上面一例中,相同功能的模块的开发,有了设计文档之后,用户不必在脑子中记住整个模块的结构,而当开发第二个模块的时候只需要查阅设计文档,就能够快速地开发出新的模块,甚至,开发完第一个模块之后,完全能可以交给另外一个成员开发,这个成员只需要查阅设计文档,就可以了解到第一个模块中使用的设计结构,再进行快速的开发。

 

要设计好一个系统必须有足够的经验和知识

自己曾经尝试着使用Google Web TookitGooglejava程序员开发的一套实现ajax的框架)做了一个版本的学生信息管理系统。但是开发完之后,发现这个设计非常得杂乱,自己再需要对某个模块的功能进行修改的时候,显得非常得复杂。性能也不高,页面也不够友好。原因是自己对gwt框架并不是很了解,只是一个新手,而且gwt是新出的开发工具,还没有足够的开发类的文章供参考,更多的需要自己去探索。一个新手拿自己并不熟悉的工具来开发一个具有一定规模的系统很明显是力不从心的。

当时对mvc三层架构的设计模式并不是很了解,对于ajax技术也只是略知皮毛,结果并没有将ajax的长处发挥在异步数据传输上,更多的只是客户端的javascript的应用。所以第一版本整体被自己否决了,浪费了很多宝贵的时间。但是也增加了一个教训。

于是在新版本的系统中,我选用Struts。虽然在开发初期,对于Struts并不是很了解,但是因为Struts已经十一个非常成熟的框架了,有很多的资源可以参考。于是我利用了一段时间迅速入门,并投入开发,开发的过程中,为了增加客户端的体验,我还迅速学习了javascrpit以及css

在对struts以及jscss有一定了解之后,眼前逐渐明朗起来。整个开发的结构也逐渐浮出水面。

所以要设计好一个系统必须要有足够的经验和知识。

 

 

本次srtp经历对我来说的确受益匪浅。所获心得我也必将使用在以后的项目之中。

 

秦岭

2007-3-12