本文主要是介绍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)做了明确的职责和策略划分:
- 实体(Entities):具备唯一ID,能够被持久化,具备业务逻辑,对应现实世界业务对象。
- 值对象(Value objects):不具有唯一ID,由对象的属性描述,一般为内存中的临时对象,可以用来传递参数或对实体进行补充描述。
- 工厂(Factories):主要用来创建实体,目前架构实践中一般采用IOC容器来实现工厂的功能。
- 仓库(Repositories):用来管理实体的集合,封装持久化框架。
- 服务(Services):为上层建筑提供可操作的接口,负责对领域对象进行调度和封装,同时可以对外提供各种形式的服务。
当然,DDD中还提出了聚合和聚合根(Aggregate Root)的概念,不过我们在实践过程发现聚合根有问题复杂化的倾向,用传统的聚合、组合等概念去描述领域对象之间的关系更容易理解,所以这里对这个概念就不做介绍了。
这篇关于DDD、Repository、Factory百家争鸣的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!