当前位置:网站首页>细讲DDD领域驱动设计
细讲DDD领域驱动设计
2022-07-31 10:01:00 【51CTO】
DDD:指领域驱动设计,是domain driven design的缩写。
介绍DDD基础知识的相关文章很多,本文就不普及相关的基础知识了
- 《DDD基础知识与总结》
- 《DDD与分层架构》
1. 初识DDD
脚本式编程(dao+service)与DDD领域驱动模式区别如下:
其每一层的作用范围和含义如下:
1)展现层(Presentation Layer):负责以Restful的格式接受Web请求,然后将请求路由给Application层执行,并返回视图模型(View Model),其载体通常是DTO(Data Transfer Object);
2)应用层(Application Layer):主要负责获取输入,组装上下文,做输入校验,调用领域层做业务处理,如果需要的话,发送消息通知。当然,层次是开放的,若有需要,应用层也可以直接访问基础实施层;
3)领域层(Domain Layer):主要是封装了核心业务逻辑,并通过领域服务(Domain Service)和领域对象(Entities)的函数对外部提供业务逻辑的计算和处理;
4)基础实施层(Infrastructure Layer)主要包含Tunnel(数据通道)、防腐层,Config和Common。这里我们使用Tunnel这个概念来对所有的数据来源进行抽象,这些数据来源可以是数据库(MySQL,NoSql)、搜索引擎、文件系统、也可以是SOA服务等;Config负责应用的配置;Common是通用的工具类。
常见的领域驱动业务调用链过程如下图所示:
调用过程大致如下:
- 业务调用方基于网关传入DTO数据,为了便于区分业务场景,将DTO数据又细分为CQE三种模式的数据。
- 业务数据传入后,基于Spring Validation等模式做基础数据验证(如必填,格式,大小等基础验证);
- 数据进入到Controller层,并调用应用层相关的应用功能;
- 应用层不做具体的业务实现,只做编排处理,做业务的流程处理。应用层可做如下操作:
- 应用层调用防腐层查询其他系统的数据;
- 应用层调用仓库层查询本系统相关的数据;
- 应用层调用工厂创建实体(简单实体,可在应用层直接生成);
- 应用层调用第三方领域服务,实体或聚合根的方法处理业务逻辑;
- 应用层调用仓库层保存数据;
- 工厂创建实体,简单的实体可不基于工厂创建;
- 领域层处理实体的行为,核心业务逻辑处理放在领域层,领域层可调用基础层的所有模块处理业务(领域层原则上不直接调用仓库层保存数据,保存数据应该放在应用层调用);
- 仓库实现层最终落地数据,进行数据存储(其他层不能直接与Tunnel(数据通道)交互,必须基于仓库层才可以);
- 一个业务行为结束后,若产生副作用,再应用层发出事件通知,其他模块再监听处理。(事件归属应用层还是领域层,网上各有不同的方案,本例是放在应用层。领域层本身只是内存化操作。等一个实体行为真正数据存储成功后,再发出事件,便于理解和维护。)
边栏推荐
猜你喜欢
尚医通【预约挂号系统】总结
第五章
第二十三课,抗锯齿(Anti Aliasing)
Data Middle Office Construction (6): Data System Construction
cocoaPods管理之后工程结构变化
【NLP】Transformer理论解读
【软考软件评测师】2012综合知识历年真题
csdn file export to pdf
Gradle series - Groovy overview, basic use (based on Groovy document 4.0.4) day2-1
Come n times - 07. Rebuild the binary tree
随机推荐
Canvas particles change various shapes js special effects
Kotlin—基本语法 (四)
Flink1.15 source code reading - PER_JOB vs APPLICATION execution process
The future of the hybrid interface: conversational UI
Chapter VII
GCD简单了解
loadrunner录制问题
(C language) program environment and preprocessing
loadrunner脚本--添加集合点
Module eight
让动画每次重复前都有延迟
Qt 编译错误:C2228: “.key”的左边必须有类/结构/联合
小程序如何使用订阅消息(PHP代码+小程序js代码)
模块八
js实现2020年元旦倒计时公告牌
第五章
一些计时软件,生产力工具
Progressive Web App(PWA)
富文本编辑器Tinymce
踩水坑2 数据超出long long