再谈业务逻辑架构模式(事务脚本,表模块,活动记录,领域模型)
2010-12-16 12:47
1986 查看
前几天写过一遍博文:业务逻辑架构模式(事务脚本,表模块,活动记录,领域模型) ,此文仅对常用的设计方式进行了一个大概的描述,感觉意犹未尽。经过几天的研究查证与思考,又有些新的认识。
虽然说这是四种独立的架构模式,但是他们之间并不是毫无关联的。除去在大型软件中很少使用的表模块,事务脚本与活动记录经常交叉使用,活动记录与领域模型也是互通有无。先说前者。
活动记录的优点很多,缺点也很明显。最大的缺点就是由于是一张表对应一个模型,业务操作基本上都是基于单表的。当发生跨表逻辑时,就无法应付了,这时只好求助于事务脚本,有时直接在Model里写事务脚本,有时则在Model的上方建立一个XXXHandler或XXXManage来实现事务脚本。如果对象间的关联越来越多, 你的事务脚本越来越庞大, 重复的代码越来越多,项目就不可控了。
对于领域模型,其构建模式并不是一成不变的,其很多变种就与活动记录比较类似。常规的方式,是领域模型直接与数据库映射,中间没有其它层。但是也有这样一个变种,在数据库与领域模型间加入实体层,每一个实体对应一张表,领域模型以继承或重新编写的方式构建于实体之上。实体仅有数据,其CRUD由上层或其它对象完成,或者实体可以自行实现自己的CRUD,领域模型则通过操作各个实体的CRUD来完成业务逻辑。后面的一种架构方式,不就很象活动记录+领域模型的架构吗
下面再继续看看领域模型。如下图:
在整个软件架构过程中,BO(业务对象)通过DAO(数据访问对象)操作PO(持久对象)来实现业务逻辑。对于VO(页面展示对象),在单表情况下多是直接展示PO,多表情况下多是将多个PO对象合并成一个DTO(数据传输对象)再进行展示。对于实体仅有数据,其CRUD由上层或其它对象完成的这种情况,BO包含DAO对象。对于实体自行实现自己的CRUD,BO与PO对象都包含DAO对象。
具体到技术层面的选择,ActiveRecord能很好的实现活动记录模式,NHibernate对于活动记录与领域模型都有很好的支持,园子里的MySoft也是一个比较有特点的集活动记录与事务脚本于一体的框架,微软的企业库与园子里的yueue.ADOKeycap则是很好的事务脚本框架。
其实对于这些架构的问题,我还有很多细节方面的疑问,各位高手看过后如果发现我说错了,尽情拍砖纠正,让我在思想碰撞的火花中成长。
参考的文章:
面向对象的NHibernate数据查询语言-HQL
PO BO VO DTO POJO DAO概念及其作用(附转换图)
java术语(PO/POJO/VO/BO/DAO/DTO)ActiveRecord 模型
虽然说这是四种独立的架构模式,但是他们之间并不是毫无关联的。除去在大型软件中很少使用的表模块,事务脚本与活动记录经常交叉使用,活动记录与领域模型也是互通有无。先说前者。
活动记录的优点很多,缺点也很明显。最大的缺点就是由于是一张表对应一个模型,业务操作基本上都是基于单表的。当发生跨表逻辑时,就无法应付了,这时只好求助于事务脚本,有时直接在Model里写事务脚本,有时则在Model的上方建立一个XXXHandler或XXXManage来实现事务脚本。如果对象间的关联越来越多, 你的事务脚本越来越庞大, 重复的代码越来越多,项目就不可控了。
对于领域模型,其构建模式并不是一成不变的,其很多变种就与活动记录比较类似。常规的方式,是领域模型直接与数据库映射,中间没有其它层。但是也有这样一个变种,在数据库与领域模型间加入实体层,每一个实体对应一张表,领域模型以继承或重新编写的方式构建于实体之上。实体仅有数据,其CRUD由上层或其它对象完成,或者实体可以自行实现自己的CRUD,领域模型则通过操作各个实体的CRUD来完成业务逻辑。后面的一种架构方式,不就很象活动记录+领域模型的架构吗
下面再继续看看领域模型。如下图:
在整个软件架构过程中,BO(业务对象)通过DAO(数据访问对象)操作PO(持久对象)来实现业务逻辑。对于VO(页面展示对象),在单表情况下多是直接展示PO,多表情况下多是将多个PO对象合并成一个DTO(数据传输对象)再进行展示。对于实体仅有数据,其CRUD由上层或其它对象完成的这种情况,BO包含DAO对象。对于实体自行实现自己的CRUD,BO与PO对象都包含DAO对象。
具体到技术层面的选择,ActiveRecord能很好的实现活动记录模式,NHibernate对于活动记录与领域模型都有很好的支持,园子里的MySoft也是一个比较有特点的集活动记录与事务脚本于一体的框架,微软的企业库与园子里的yueue.ADOKeycap则是很好的事务脚本框架。
其实对于这些架构的问题,我还有很多细节方面的疑问,各位高手看过后如果发现我说错了,尽情拍砖纠正,让我在思想碰撞的火花中成长。
参考的文章:
面向对象的NHibernate数据查询语言-HQL
PO BO VO DTO POJO DAO概念及其作用(附转换图)
java术语(PO/POJO/VO/BO/DAO/DTO)ActiveRecord 模型
相关文章推荐
- 业务逻辑架构模式(事务脚本,表模块,活动记录,领域模型)
- [转编] 企业架构模式之领域逻辑模式的实现(事务脚本、领域模型、表模块、活动记录)
- 实现业务逻辑的几种不同方法,及其优缺点 事务脚本、表模块、活动记录、领域模型
- 【领域驱动设计】事务脚本、活动记录和领域模型
- 适当使用活动记录模式代替领域模型模式
- 《企业应用架构模式》之事务脚本、表模块、领域模型
- .NET应用架构设计—适当使用活动记录模式代替领域模型模式
- .NET应用架构设计―适当使用活动记录模式代替领域模型模式
- 领域逻辑模式(事务脚本)
- .NET应用架构设计—适当使用活动记录模式代替领域模型模式
- 业务逻辑的方法(事务脚本、Evans DDD、基于事件驱动的设计)
- 系统架构逻辑参考图【强调了领域模型+面向服务编程理念】
- 面向对象架构模式之:领域模型(Domain Model)
- 重析业务逻辑架构模式,浅浅滴
- 【架构设计】领域模型(概念模型) 、逻辑模型、物理模型、贫血模型、充血模型概念总结【待读与标记】
- 业务逻辑架构模式
- 表模块模式与事务脚本模式的代码编写
- 系统架构逻辑参考图【强调了领域模型+面向服务编程理念】
- 事务脚本的缺点以及领域模型的优点
- 系统架构逻辑参考图【强调了领域模型+面向服务编程理念】