不要局限于DDD话术中,要站在更高的层级去思索,如果让你去更加高效的复用代码,你会做些什么。在考虑DDD为了完成这个目的,它会做些什么?再次:DDD与MVC最大的区别就是他会增加一些限制,来尽量保证设计按照期望的方向发展。
DDD思想的最终目的就是实现代码层级的高内聚与低耦合。这也是软件设计的最终目的。但是如何量化常说的“高内聚与低耦合”呢?—— 代码复用(无论是常见的设计模式,还是更加高深的设计思想,其都是朝着如何使的代码能尽量复用而努力的。正所谓,改的越少,错的越少,迭代越快)
如何实现代码的复用:
- 保证行为的一致性(----DDD名词:聚合根)例如:订单和订单明细在操作是一体的,要封装起来对外提供能力,从而保证行为一致性;
- 收敛散乱在各处的逻辑(---DDD名词:充血),使用工具类不是不可以,但是如何避免因为找不到轮子而反复创建轮子这种行为。就把逻辑收敛到一个最明显的地方,考虑了下就是充血对象中。
- 保证行为粒度足够小,且不受污染(---DDD名词:分层)一般的胶水代码是:编排逻辑,领域逻辑,持久化逻辑写在一个方法中。我就是想复用一块代码也是无能为力的。解决方案就是领域层提供基础能力(你可以去复用),应用层完成编排,基础设施层负责持久化。
- 业务逻辑与技术细节解耦(---DDD名词:防腐层)这个没得分歧,加一层适配层而已。
DDD分层划分:应用编排层、领域服务层、基础设施层。复用的便是领域层。