课程名称:DDD(领域驱动设计)思想解读及优秀实践
课程章节: 战略设计
课程讲师: 尤达_技术咖啡
DDD****传统四层架构
接口层:消息路由,返回和接收对象(消息协议)解析和组装。
**应用层 Application Layer 定义软件要完成的任务,**并且指挥协调领域对象进行不同的操作。该层不包含业务领域知识。
**领域层:**实体对象和值对象,service领域服务,和仓储层(repository 主要作用就是表的对象和返回对象进行解耦,表结构对象,重新组装成上层需要的对象。)
领域层 Domain Layer 或称为模型层,系统的核心,负责表达业务概念,业务状态信息以及业务规则。即包含了该领域(问题域)所有复杂的业务知识抽象和规则定义。该层主要精力要放在领域对象分析上,可以从实体,值对象,聚合(聚合根),领域服务,领域事件,仓储,工厂等方面入手
基础设施层 Infrastructure Layer主要有2方面内容:一是为领域模型提供持久化机制,当软件需要持久化能力时候才需要进行规划;一是对其他层提供通用的技术支持能力,如消息通信,通用工具,配置等的实现;(目前项目:持久化dao,数据库表对应的对象,远程访问)
代码结构:
3,DDD传统四层架构主要解决的问题?
1,分离关注点:每一层都有自己的职责
2,领域模型更独立
3,单项依赖
4,DDD传统四层架构的缺陷?
1,领域层强依赖基础设施层:例如,领域层的repository,会直接调用基础设施层的dao操作表。形成了强耦合,怎么解决这个强依赖问题**。就是通过依赖倒置:repository的实现放到基础设施层,然后装配到领域层。**
5,依赖倒置,就是为了解决强调用的关系,出现了洋葱架构(六边形)架构,就是为了实现依赖倒置
它的思想就是把领域模型放到核心的位置,领域模型是独立的,不会直接强依赖其他层,而通过适配器来完成领域模型和外层的数据交换。
6,将DDD传统四层架构转换成洋葱(六边形)模型?
1,将repository(**仓储层主要是为了完成:领域层和数据存储层的数据交换)**的实现,放到适配器模块中,接口留在领域层。
2,远程过程调用,把接口放到了领域层,把实现也放到了基础层。本质上,远程调用也是将远程数据转成领域层的数据,所以将接口放到了领域层。
3,适配器层要实现,接口层的功能,路由和(消息分发)接收和返回对象的组装
7,洋葱架构的优点?
8,总结