热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

领域驱动设计-工厂与仓储

领域模型中有两个比较特殊的角色,他们虽然不表达业务知识,但却把他们划分在领域层中:工厂、仓储。工厂:每套领域模型(或者说一个模块module)一般都不只是一两个简单的对象,而是由一个一

领域模型中有两个比较特殊的角色,他们虽然不表达业务知识,但却把他们划分在领域层中:工厂、仓储。


工厂:每套领域模型(或者说一个模块module)一般都不只是一两个简单的对象,而是由一个一定复杂度的聚集结构组成的。对于领域模型的访问有两个准则:必须从聚集结构的根部(root)访问模型的各个部分,必须保持模型的完整性。也就是说,一开始构造一个模型的时候,必须将其完整的初始化,而不是只构造一部分,然后在随后的处理过程中逐步完善。这就需要一个比较合理的机制,确保完整的组装出模型。工厂很符合这个需求,它就跟工业生产中的工厂概念一样,组合产品的各个部分,为客户输送完整的商品(模型)。具体的工厂实现可以考虑静态工厂、抽象工厂、构建者等模式。


仓储:在软件的处理过程中常常涉及数据的持久化,如果让业务逻辑层自己负责持久化,显然是将业务逻辑和非业务逻辑(持久化)耦合到了一起。仓储就是用于业务逻辑与持久化之间的解耦。仓储通过对持久化的再次封装(如果说DAO是第一次封装的话^^),能够为业务层提供完整的领域模型,同时也提供对领域模型的存储操作。


这里需要注意的一点是,工厂属于纯领域模型的一部分,它只负责领域对象的创建工作(从无到有),而仓储封装了持久化,它操作的是已经存在的对象(从数据库中读取出来、重新存储到数据库中)。


推荐阅读
author-avatar
派沃控制阀_689
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有