DDD的深入了解
why
what
松散4层结构:
User Interface为用户界面层(或表示层),也可理解为对外接口层。负责向使用者显示信息和解释用户命令;
Application为应用层,定义软件要完成的任务,并且指挥领域对象来解决问题,并将domain的内容整合成具体业务需要的结果形式。应用层应该尽量简单,其不包含业务规则或者知识,而只为下一层中的领域对象协调任务,分配工作。
Domain为领域层(或模型层),是业务软件的核心。其负责表达业务概念、业务状态信息以及业务规则。虽然保存业务状态的技术细节是由基础设施层实现的,但是反映业务情况的状态是由本层控制并且使用的。
Infrastructure层为基础实施层,向其他层提供通用的技术能力:为应用层传递消息,为领域层提供持久化机制。础设施层还能够通过架构框架来支持四个层次间的交互模式。
严4层结构(个人认为):
相对松散4层结构,Infrastructure只能由Domain层使用,并且Infrastructure依赖、继承Domian层的数据交互接口repository(即为domain层服务)。具体的依赖关系如下图:
依赖结构原因:业务领域模型低耦合,高内聚。防止数据依赖方的变化,特别是在商业化的项目中,客户的数据源千变万化。
六变形架构:
六边形架构也称为端口与适配器,如下图:
六边形每条不同的边代表了不同类型的端口,端口要么处理输入,要么处理输出。对于每种外界类型,都有一个适配器与之对应,外界通过应用层API与内部进行交互;同时DDD战术设计的建模元素Repository的实现看作是持久化适配器,该适配器用于访问先前存储的聚合实例或者保存新的聚合实例。
六边型有很多演化,例如:
Jeffrey Palermo在2008年提出了洋葱架构,六边形架构是洋葱架构的一个超集。
Robert C. Martin在2012年提出了干净架构(Clean Architecture),这是六边形架构的一个变体。
Russ Miles在2013年提出了Life Preserver设计,这是一种基于六边形架构的设计。