DDD、Repository、Factory百家争鸣

Face Bug :學過Design Patterns的人應該對Factory不陌生,我們用它來簡化物件的複雜創建過程。Factory用於從無到有的建立過程,就好比一台Notebook,在生產線上一路組裝各種零件,最後成為一台可被銷售的商品,在這個案例裡,Notebook商品概念就是一個聚合,前面說過,只能透過Aggregate Root來存取整個聚合,因此Factory就是用來建立這個聚合。

你可以直接在Aggregate Root中增加一個Factory method,或是增加一個Factory類別,以我個人的習慣是使用單獨的Factory類別。


Face Bug :我比較偏愛將IRepository放在Domain Layer,實作的部份放在Infrastructure Layer,然後透過依賴注入(DI)的方式將實體注入到Domain Model中,但也有人就直接都放在Domain Layer,兩種方式都有優缺點,放在Domain Layer的壞處是與使用的ORM framework耦合性變高,以我個人來說,不喜歡看到這樣的狀況發生,但相對的必須付出一些效能成本,畢竟IOC的本質是透過Reflection。


Laurence:Domain 层是整个系统的核心层,该层维护一个使用面向对象技术实现的领域模型,几乎全部的业务逻辑会在该层实现。Domain层包含Entity(实体)、 ValueObject(值对象)、Domain Event(领域事件)和Repository(仓储)等多种重要的领域组件。


Laurence:作 为基础设施层,Infrastructure为Interfaces、Application和Domain三层提供支撑。所有与具体平台、框架相关的实 现会在Infrastructure中提供,避免三层特别是Domain层掺杂进这些实现,从而“污染”领域模型。Infrastructure中最常见 的一类设施是对象持久化的具体实现。

池建强领域驱动设计除了对系统架构进行了分层描述,还对对象(Object)做了明确的职责和策略划分:

  1. 实体(Entities):具备唯一ID,能够被持久化,具备业务逻辑,对应现实世界业务对象。
  2. 值对象(Value objects):不具有唯一ID,由对象的属性描述,一般为内存中的临时对象,可以用来传递参数或对实体进行补充描述。
  3. 工厂(Factories):主要用来创建实体,目前架构实践中一般采用IOC容器来实现工厂的功能。
  4. 仓库(Repositories):用来管理实体的集合,封装持久化框架。
  5. 服务(Services):为上层建筑提供可操作的接口,负责对领域对象进行调度和封装,同时可以对外提供各种形式的服务。

  当然,DDD中还提出了聚合和聚合根(Aggregate Root)的概念,不过我们在实践过程发现聚合根有问题复杂化的倾向,用传统的聚合、组合等概念去描述领域对象之间的关系更容易理解,所以这里对这个概念就不做介绍了。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值