项目基本上采用如下交互模式.
流程如下.
- 一个页面对应一个用类
- 一个页面对应一个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
首先说说我们现在采用的开发框架.然后慢慢的进行改造.
首先是标准的WEB应用程序.包括WEB层,业务层(BO层)和持久化层(DAO/PO).
1.WEB层,采用Struts.
1.1 JSP页面采用少量的Struts标签,其他功能通过自定义标签完成.
1.2 页面操作分为 添加(修改)/列表 两部分.基本上通过CSS来展现.其中列表部分采用Displaytag
1.3 按需要采用Ajax
2.业务层采用Spring.
2.1 通过DelegatingActionProxy绑定Struts
2.2 BO只有一个空父类.提供Log4j的实例.
2.3 BO依赖与BaseDAO及具体业务DAO.
2.3.1 BaseDAO完成基本的增删改查,
2.3.2 具体业务DAO完成关于本表的复杂的查询
2.3.3 多表关联的查询,则单独封装在DAO中
2.4 事务控制统一由Spring AOP配置完成.
3.持久层采用Hibernate
3.1 BaseDAO继承HibernateDaoSupport
3.2 普通HSQL文查询.
以上是当前项目的状况,以后会逐一对其改进.