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

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


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


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


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

你可能感兴趣的:(领域驱动设计)