现在开发软件时,方式1。我一般按 组件的概念进行设计。将一个一个的SERVICES当成组件来看,将同一组功能操作定义在同一个SERVICES中。
而一个控制层(ACTION)则可能会调用到多个SERVICES进行操作。方式2。另一种实现方式是将所有功能操作封装到一个SERVICES。此种方式可能会涉及DAO交叉供不同SERVICES调用的情况。
功能操作我以DAO为基础来说明,以下图示说明
方式1:
方式2:
不知道大家认为以上两种方式哪种更好。
如果采用方式1的话,事务边界该如何控制实现。(SPRING)
欢迎大家发表意见,顶者有分。
而一个控制层(ACTION)则可能会调用到多个SERVICES进行操作。方式2。另一种实现方式是将所有功能操作封装到一个SERVICES。此种方式可能会涉及DAO交叉供不同SERVICES调用的情况。
功能操作我以DAO为基础来说明,以下图示说明
方式1:
方式2:
不知道大家认为以上两种方式哪种更好。
如果采用方式1的话,事务边界该如何控制实现。(SPRING)
欢迎大家发表意见,顶者有分。
事物的控制交由顶层的一般服务层,一个一般服务层可以调用多个原子服务,一个原子服务可以调用多个原子DAO.
提出原子服务层和原子DAO的概念就是不想出现重复的开发,同时一个控制层(ACTION)只需要调用一个服务层,简化控制层代码。让控制层只关注获取的数据处理,一般服务层去关注数据处理逻辑,原子服务层关注一个不可划分的逻辑方案。
如果复用service多,则采用方式 1,如果复用DAO多(service少),则采用方式2。
这其实是一个组件粒度该划分到多大合适的问题,其答案也是根据开发的实际需要,没有统一的标准。
至于采用方式1下的数据库事务,用全局事务控制JTA+start事务+commit或rollback组件应该是可以搞定的。
组件是可重用的,面向业务的,它指针对单一问题而设计的,它的移除和修改是不会影响其他功能的正常运作的,它是面向AOP的,技术设计是OOA,思想设计是OOP,开发是OOD............典型的例子:
HIBERNATE,SPRING,STRUTS,IBATIS,EXTJS,JQUERY,QUZRT,YAHUI等等......
这些里面的架构都是基于面向业务的,所有都是以模式加组件而封装的.
但多层的情况,不知道有没人试过SPRING的事务可以跨这么多层提供得了吗?
我记得我试过把SPRING的事务拦截至ACTION会出错,多层SERVICES的我没试过。
11楼不知道是什么意思,我看不到。12楼的想法和我一样。只是你没帮我解决使用方式一时,控制层调用多个SERVICES业务是否合理。在使用SPRING的事务时如何解决。