项目基本上采用如下交互模式.
流程如下.
- 一个页面对应一个用类
- 一个页面对应一个Struts Action.
- 页面上一个动作(提交按钮)对应Action一个方法(或者对应if语句)
- 一个Struts Action对应一个BO类
- 一个Struts Action 方法(页面一个动作)对应BO一个方法
- 一个BO对应1到多个DAO.
其中业务对象BO,
- 都是按照无状态设计的,类似函数大集合.
- 函数之间不考虑复用,函数之间功能独立,代码重复率高.
- 业务对象都是都是根据用例来划分的(1 vs 1).
- 业务对象之间不考虑关系,全部都是函数载体.
- DAO主要服务于业务对象.基本上也是1 vs 1
- 只能服用CRUD情况.复杂的sql文如果很相似可以合并.
- 由于设置上是为业务对象服务,业务对象之间设置沟通很少,所以DAO实现也多重复
但是开发效率很高.从外到里,全程一人设计.单独看功能完整,全局看,雷同的太多了.
首先提炼业务对象.从全局角度考虑,划出有限个业务对象.利用对象关系勾勒出完整的业务逻辑.
其中每个业务对象与PO紧密合作,PO依赖与DAO,实现对象的基本操作(CRUD).
以上实现业务对象层,主要用来描述业务对象之间的关系,已经持久化功能..
再设计出查询层,支持复杂查询,获取各种查询结果.
门户层对客户端(Struts Action)提供业务接口,支持如下:
- 对业务对象层操作
- 对查询层操作
- 对于复杂业务逻辑,结合查询层和业务层来实现.
附上代码。
项目代码 主要改进如下类
- CompinfoServiceImp
- 直接调用Compinfo,不显示调用DAO
- Compinfo
- 内部隐藏调用DAO