最近终于轻松下来了。带了两年新人,实实在在的体验到了做为项目经理+技术经理+测试经理+技术支持工程师同时兼任程序员得酸甜苦辣。或许我这个人就是个劳碌的命,一旦闲下来,反而觉得很别扭。当然了,或者这是程序员的通病吧,呵呵~。在律所工作的三年中,先后接触了几个企业邮箱系统,大的小的,知名的不知名的,每个都让律所不太满意,趁着闲下来的这段时间,打算编写个这方面的程序,把以前遇到的系统中不满意的地方尽可能解决掉,同时因为企业邮箱程序的特殊性,它既包含B/S的内容,也包含单机软件的内容,同时包含一些系统底层的知识,所以也很合适作为新人培训的案例教程,等把这个系列写完,再好好整理整理,就可以作为律所内部培训使用了。好了,废话不多说了,下面介绍下关于程序的一些想法。
程序本身要作为案例教学,而且面对的对象是初入行的新人,所以在程序注释和解释方面会尽可能详细。企业邮箱基本上可以算是个大型项目了。所以程序考虑分层架构,这样方便扩展。程序本身包含了单机软件和B/S结构的内容,对于B/S方面,程序会严格遵守Web标准。对于单机软件方面,程序会考虑多语言配置。程序会融入自定义标签调用、xslt、xml、模板、静态化等应用,并提供完整例子。因为程序本身属于大型项目,所以对可维护性和性能会有着重考虑。但是,我个人信奉一句话:程序首先是写给人看,其次才是写给机器看!所以程序会在性能与易读性方面做出综合取舍。下面介绍一下程序的基本框架:
图一、程序框架结构
程序命名为《易迅企业邮箱系统》,取意简单容易、迅捷高效。程序基于.NET4.0 Framework, 开发工具及辅助数据库为:VS2010+SQLServer2008,下面详细介绍程序各个层的目的:
- EasyFastMail.BLL——业务逻辑层。主要负责程序的业务逻辑判断。注意:业务逻辑不是程序逻辑,尽管他们在很多时候很相似,甚至于融为一体。程序逻辑是指一个操作是否成功,例如,删除一条数据,根据数据库的返回值判断删除是否成功,这个属于程序逻辑,他判断的是程序的某项具体操作是否成功。但是在复杂环境下,删除数据的同时需要考虑很多问题,而不仅仅是删除数据这么简单。以删除用户这个常用功能为例:在企业OA中,入职即增加用户,离职即删除用户是难以满足企业的需要的,在企业中,离职人员管理也是人力资源部的一项重要工作。(例如领导层正在讨论一个项目说明,大家认为整体上是可行的,有利润前景,但是一些细节上的东西,书面报告记载的不是很清楚,这时就需要联系报告的撰写人或者项目的负责人来做说明,假如该人已离职,在绝大数情况下,因为遗忘或者其他原因,他不可能会给他的继任者把每一项工作都交代的十分详尽清楚,所以这时就需要联系该人,如果程序中设置,离职即删除用户,那么很可能就无法再次联系上该人,这样会造成项目搁置或者其他的损失)离职操作应该删除用户表中的数据,同时将该数据保存到离职人员表中,并且这两项操作应该置于一个事物中,保证同时成功,否则回滚事物并且提示操作者。这样看起来,删除用户这个操作应该包含两步:1、删除用户表中的数据;2、将该数据插入到离职人员表中。这两个操作合起来即程序的业务逻辑。概括来说,程序的业务逻辑有时候和程序逻辑完全重合,有时候会同时包含几个程序逻辑。
- EasyFastMail.Cache——程序的缓存层。缓存对于程序尤其是大型程序来说怎么强调都不为过,它能很大程度上提升程序的性能。这点大家一定要重视再重视,我曾经亲眼见过因为有了合理的缓存设计,致使程序性能飙升百分之七八百的案例。
- EasyFastMail.Common——公共类库组件,主要为各层之间共用模块及其他辅助工具类库。
- EasyFastMail.Model——程序的模型层。Model用于传递数据,他即可以和数据库表完全对应,也可以适当增加或者删除字段。如何设计,根据实际情况去取舍,只要达到传递数据的目的即可。例如添加用户功能中,用户包含姓名、登录名、年龄、性别等等,如果没有Model,实现该功能需要的对应方法就需要接收很多参数,这样很容易因为粗心大意致使程序出现bug,并且如果想实现批量增加,则更难处理。而如果有了Model,处理起来就简单多了,直接给Model赋值,传递给对应的方法,该方法根据需要,从Model中取值即可。
- EasyFastMail.SQLServerDAL——程序的数据库操作层。注意,不要在数据库操作层中做逻辑判断,该层的职责是增、删、改、查并提供返回值供调用层进行判断。
- EasyFastMail.Web——程序的页面展示层(B/S结构)。展示层的职责是收集、展示数据及验证收集的数据是否合法。本层是程序混乱的重灾区,新人程序员很容在犯的一个错误就是在该层包含太多太多的逻辑及数据操作。这样做就失去了分层的目的,致使程序的可维护性、可扩展性成为一句空话。请大家一定注意这点。
- EasyFastMail.WinForm——程序的展示层(单机软件或者C/S结构)。注意事项同上。
好,本章内容就先到这里,从下章开始我们正式进入编码过程。另:该系列文章是本人业余时间编写,本人没精力做大量前期准备工作,所以难免有疏漏之处,欢迎朋友们批评指正,我会根据朋友们的意见与建议修改对应章节。我曾经看过张孝祥先生的Java系列视频,我个人非常欢迎,但是无法确定对新人是否很有意义,所以在犹豫做还是不做,也欢迎大家对这个多提建议。