您的位置:首页 > 职场人生

程序员的懒惰与勤奋(绝对原创)

2006-06-12 10:28 357 查看
记得在深圳做诉讼系统的时候,采用Delphi开发,有一位同事做立案模块,这个模块里各种立案审批表很多,比如民事案件、刑事案件、商事(经济)案件、行政案件、国赔等都需要不同的审批表,这位同事在时间很紧急的情况下,Ctrl+C、Ctrl+V再修改完成了这些审批表的制作,但是他也察觉了问题:
(1)如果再添加新的审批表,可能还需要重复上面的操作,费时费力而且容易出错,查错困难。
(2)由于业务的变更,可能需要修改上面这些审批表的几个或者所有的相同信息,可能代码都一样。
后来,在项目开发完毕,我对这部分代码进行了重构(由于某些原因该模块交给我进行修改):
(1)抽取审批表的头:都具有案由、当事人(原告和被告)等。
(2)抽取审批表的尾:都具有庭长审批意见、院长审批意见等。
(3)把诸如费用计算等其他的部分审批表相同的部分也进行抽取
(4)对不同案件不同的部分单独做成一个Form,然后把上述几个部分按需进行拼装。
改过之后,系统的稳定性得到了很大的提高,以后业务变更只需要修改一个地方即可。但是这些方法不是perfect,对相同部分的抽取对业务的熟悉要求很高,对抽取粒度要控制好,修改的时候需要考虑很周到,另外业务变更可能对需要把原来相同的部分移植到不同的部分,修改变得更费事些,当然这种情况较少出现。
值得一提的是,在上面的数据存储过程中,我采取了一个简单的持久化方案:把输入控件的命名按照表名_字段名这种进行办法进行命名(前提字段名不能有_,不过我们设计字段名都是采用单词首字母大写),然后遍历控件再根据数据字典自动组装SQL语句,采用参数的办法插入和更新数据库,对插入的先后顺序我们根据在数据字典设置的外键来确定。这样简化了不少写SQL语句的时间,而且也移植到了其他的模块开发。很遗憾,当时没有考虑到用XML(象现在的Hibernate)进行持久化。
说了这么多,似乎和程序员的懒惰和勤奋无关,如果你这样认为,那么可以说你错了!我认为:程序员必须具备懒惰和勤奋这两种素质。
懒惰是人的天性,谁都想在家看看球赛、玩玩游戏,对吧??!!不过作为程序员,你需要懒惰的巧妙!Ctrl+C、Ctrl+V的不辞辛苦不一定是不可取的,你需要最大限度的复用,那么怎么样实现最大限度的复用呢?我想从下面几个方面入手:
(1)代码复用:这是软件工程里已经提到的,在此不作过多赘述。简单一点的说:如果超过n行(在不同人的眼中这个数字可能不一样)代码相同,你可能就需要考虑把这段相同的代码抽取出来作为一个函数或者类。所以,在公司成长的过程中,应该积累一些公有函数库、公有组件等。在我上面提到的一个案例中,我就较好地进行了抽取公有的业务,将业务分拆为几个不同的模块,然后拼装。另外,在我的一个.Net项目中,我采用了通用查询,即根据查询视图,根据视图配置表,自动生成查询条件,再根据查询条件生成查询结果,并且提供导入到Excel和XML功能,在这个项目中复杂的查询都是通过该通用查询来实现的,较好的实现了代码复用,而且界面一致,大大缩短了开发时间。
(2)模型复用:这里最典型的要数MDA(模型驱动架构),现在流行的建模工具都或多或少的对它进行了支持,比如最新的Rose、PowerDesigner都提供类图直接转换为Java、C++、C#等语言的实体类;都提供概念模型转换为物理模型。Borland Together还提供类图和实体类之间的相互转换。
(3)框架复用:说起框架,这里有一个很有趣的事:在我研究生开题答辩的时候,有一位老师硬说框架和体系架构是一码事,我给他解释了半天。这里简要的说明以下它们的区别:框架包括:.Net、Spring、Hibernate、Struts、WebWork都是框架,他们大多从纯技术的角度出发的,都提供丰富的API,都让编程更加容易更直观,象Spring、Struts、WebWork都提供了对MVC设计模式的实现。而体系架构是从整个系统的角度上出发的,比如B/S、SOA等都是一种体系架构。其实细微的差别只有靠你慢慢体会了,我说的不一定全面,也不一定正确。
(4)资源复用:提到资源复用我们不得不提两个很时髦的字眼:设计模式和池化。比如说前者的单例模式和后者的数据库连接池都提高了资源利用率。当然资源复用不仅包括这些,设计模式不仅使得熟练设计者的设计经验可以被初学者和其他设计者掌握,而且为软件重构提供了目标,提高了代码复用。
(5)构件复用:构件最早提到的是在美国,但最早转化为产品是在中国,上海普元信息系统有限公司就是第一个吃螃蟹的人,该公司的EOS平台中把构件分为:基础计算构件、基础业务构件、基础应用构件、工作流构件、页面构件,为构件复用开拓了实际应用的篇章。但是,该平台想流行起来仍面临着很多困难:(1)其他公司不愿捆绑在这辆战车上;(2)对于程序员,不愿被束缚住手脚,同时学习起来仍有一定的难度。
(6)模板复用:比如Java中Velocity和PHP中的Smarty,这里举一个我本人最近开发的一个框架:原理是利用模板、XML等技术自动生成和实体表相关的一系列文件:Struts Action文件,Struts ActionForm文件(如果是该页面不牵涉到其他的表,将ActionForm文件和Hibernate POJO类文件合在一起)、Hibernate POJO类文件、Hibernate映射文件、实体详细信息JSP页面、实体列表JSP页面,并实现Hibernate、Struts配置文件的自动生成。这里面大量使用了模板,包括实体详细信息JSP页面的使用到的控件模板,大大提高了框架的适用性。
兄弟,今天你复用了吗?:)
同时,作为程序员,你不能一味的懒惰,还需要你的勤奋,需要你不断地学习新知识,更新你的知识库,不要半年不更新一次哦!不仅如此,还需要你懒惰的巧妙哦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: