概况

DDD是真正从业务角度出发,为全世界绝大部分做纯业务开发提供的一整套架构设计思路。

DDD落地方案

项目模块

types

types模块是api层,是保存可以对外暴露的domain primitives的地方,domian primitives因为是无状态的逻辑,可以对外暴露,所以经常被包含在对外的api接口中,需要单独成为模块,types模块不依赖任何类库,纯pojo

domian

domian模块是领域服务层,包含有状态的Entity、领域服务domian service以及各种外部依赖的接口(repository、acl-防腐层、中间间)等,domian模块仅依赖types模块。

application

application模块服务编排层,依赖domain模块

infrastructure

infrastructrue模块是基础设施层,包含了persistence、messaging、external等模块,persistence模块包含数据库dao的实现,包含data object、orm mapper、entity到DO的转化类等,依赖domain模块,做persistence、external的实现

web/adapter

web/adapter是适配层,外部调用http、rpc、mq统一入口

start

start模块是springboot的启动类

type

exception

types

domain

entity - 领域实体

service - 领域服务

external - 外部接口实现

messageing - 消息

repository - 数据库持久层

exception -

application

infrastructure

业务规则的归属到底是对象的 - 行为,还是独立的 - 规则对象

业务规则之间的关系如何处理

通用行为应该如何复用和维护

组件化

行为抽离

数据驱动

数据、状态、行为分离

开闭原则:对扩展开放,对修改关闭

DDD六边形架构落地规范

1、架构示意图

DDD - 图1

2、分层说明

基础设施层:最底层,包括无业务逻辑的工具类,比如日期处理、json解析等、所有上层都依赖此层,但此层不可依赖其他层

适配器层:内外部系统交互层,主要包括各种与外部交互的实现类

应用层

领域层

3、依赖约定

单向依赖原则为最高原则,底层不可依赖高层,内层不可依赖外层

所有层都依赖基础设施层

适配层依赖其他所有层

应用层依赖除适配层外的其他所有层

领域层仅依赖基础设施层

依赖方向的实现

DDD - 图2

DDD - 图3

参考文档:https://mp.weixin.qq.com/s?__biz=MzAxNDEwNjk5OQ==&mid=2650403892&idx=1&sn=a91fa477392e80f9420a8ca4d26bcace&chksm=83953c2cb4e2b53a6af3b5a82c3b7d7ed932bfe83f59877a935445ae89edd0ff4ee1c4e82fba&scene=21#wechat_redirect