天天看点

构建软件程序的基本步骤

转载,有删改:http://www.blogjava.net/sitinspring/archive/2008/01/26/177949.html

1.如何建立起领域模型

途径一:分析业务中的业务流和业务规则,从中归纳出功能的基本单位,这个基本单位就是领域模型之一或领域模型的一部分.

途径二:从原型界面中观察显示的数据,它们是领域模型的外在体现.

途径三 :从持久化介质中推导领域模型,如从数据库的表结构和ER图中推导领域模型.

途径四:向领域专家问询业务流程中的核心单元是什么,甚至自己进入问题领域去学习探究。

途径五:将不熟悉的领域和相似的自己熟悉的领域做对照,类比出领域模型。

途径六:从已有的知识系统中学习,参考功能相似的软件代码,向优秀代码学习。

2.如何完善领域模型

领域模型是经常发生相互联系的,上一步只是建立了孤立的,仅能表现单个领域对象信息的模型,要使它们丰富完善起来,需要做以下工作:

1) 从程序的功能角度入手,考虑需要几个领域对象才能完成这个功能,再由此考虑领域对象之间的联系.这方面的典型例子是需要雇员类和资源类的协助,借贷关系才能完整的表现出来.

2) 从领域对象本身入手,考虑领域对象之间是否有级联,回溯,包含等常见关系.如个人信息包含地址信息,公司类和雇员类的级联关系,雇员类查找自己所属公司的回溯关系等.

3) 从反持久化入手,考虑把一个领域对象从存储介质中提取出来需要那些领域对象的帮助,这些领域对象是通过那种方式联系在一起的,这方面的典型例子是表之间的主键和外键,领域对象同样也要具有相对应的成员变量.

3.领域对象设计完成之后

一旦领域对象设计完成,程序的设计工作就可以说完成了一大半,其余工作都是围绕领域对象来进行,这些工作有:

1) 从考虑怎么为领域对象服务入手,为领域对象设计服务类,服务类的常用方法有添加,删除,更新,查询领域对象四种以及从ID取得一个领域对象,判断持有某个ID的领域对象是否存在等.具体的操作实际上由服务类的持久层类成员完成,服务类实际上起到的是一个领域对象上下传输通道的作用.一般来说Service层的六大函数是add,delete,update ,search, hasId(String id), getById(String id))再加上一些用于查询的函数。

2) 考虑到实现服务类中要求的方法,设计持久层类,其中的成员函数基本是服务类的六大方法的具体化,持久层类实际上起到一个把领域对象存储到持久介质中和从持久介质中取出领域对象的作用.如果持久层是关系型数据库的话,还需要设计领域对象对应的表以及表之间的关系ER图。

3) 从功能的角度设计控制层的函数和类,在这里控制层类调用服务层类来操作领域对象,业务逻辑主要体现在这里.

4) 从领域对象的输入输出和表现的角度设计各个表现层类.设计这一层类时应该从用户立场考虑而不是从代码编写者的立场考虑,怎么让用户感到直观,方便,快捷就怎么设计界面.

5) 在设计上述层次的同时,考虑到减少重复代码,突出主干代码而设计实用层类,把共通的操作都归纳到一起,这样既提高的代码的清晰程序和可读性,也使修改变得方便容易起来.

6) 如果有些变量在使用过程中是可能发生变化的,如数据库的地址,业务中一些硬编码信息等,这样的量就不该硬编码(Hard Code)在程序中,否则修改后还需要重新编译,打包,发布.而应该把这些量写在XML形式的配置文件里,在程序启动时读取.

4.软件的六大层次

上面的工作完成后,我们会得到以下六大层次:

1) Domain层

2) Service层(允许Control层访问,能访问Persistence层)

3) Persistence层(也称为DAO层,只允许Service层访问)

4) Control层(访问Service层和View层)

5) View层(仅被Control层访问)

6) Util层

5.逐步完善六大层次中类的各个具体函数

6.绘出各层次类的静态类图

7.最后的步骤:子程序内部的设计

8.软件的最终需要具备的现代软件的八个典型特征

(1)最小的复杂度:整个系统可以分解为简单而易于理解的各个部分.

(2)易于维护:程序有良好的可维护性.

(3)松散耦合:通过应用类接口中的合理抽象,封装性以及信息隐藏等原则,设计出相互关联尽可能最少的类.

(4)适应变化:能在不改变系统基本构架的基础上,适应未来的变化,有良好的扩展性,程序可扩展,可重用.

(5)有明晰的层次:每层各司其职,有良好分工.

(6)高扇入低扇出:系统很好的利用了较低层次上的工具类,重复代码很少或没有.

(7)有良好的规范:无论多少人参与了项目,从代码看来犹如出自一人之手.

(8)使用标准技术.

(以上八点来自<<代码大全2>>)

继续阅读