您的位置:首页 > 其它

DDD、Repository、Factory百家争鸣

2015-06-02 09:21 232 查看
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)做了明确的职责和策略划分:实体(Entities):具备唯一ID,能够被持久化,具备业务逻辑,对应现实世界业务对象。
值对象(Value objects):不具有唯一ID,由对象的属性描述,一般为内存中的临时对象,可以用来传递参数或对实体进行补充描述。
工厂(Factories):主要用来创建实体,目前架构实践中一般采用IOC容器来实现工厂的功能。
仓库(Repositories):用来管理实体的集合,封装持久化框架。
服务(Services):为上层建筑提供可操作的接口,负责对领域对象进行调度和封装,同时可以对外提供各种形式的服务。
  当然,DDD中还提出了聚合和聚合根(Aggregate Root)的概念,不过我们在实践过程发现聚合根有问题复杂化的倾向,用传统的聚合、组合等概念去描述领域对象之间的关系更容易理解,所以这里对这个概念就不做介绍了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: