当前位置:网站首页>细讲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(数据通道)交互,必须基于仓库层才可以);
- 一个业务行为结束后,若产生副作用,再应用层发出事件通知,其他模块再监听处理。(事件归属应用层还是领域层,网上各有不同的方案,本例是放在应用层。领域层本身只是内存化操作。等一个实体行为真正数据存储成功后,再发出事件,便于理解和维护。)
边栏推荐
- A Spark SQL online problem troubleshooting and positioning
- 如何优雅的停止一个线程?
- qt pass custom structure parameters in different threads
- 尚医通【预约挂号系统】总结
- 【软考软件评测师】2012综合知识历年真题
- Redis Cluster - Sentinel Mode Principle (Sentinel)
- 学习笔记——七周成为数据分析师《第二周:业务》:业务分析框架
- Solve rpc error: code = Unimplemented desc = method CheckLicense not implemented
- 我们能做出来数据库吗?
- NowCoderTOP28-34 binary tree - continuous update ing
猜你喜欢
随机推荐
作为面试官,关于线程池的问题我一般这样套路...
Meikle Studio--Hongmeng 14-day development training notes (8)
迪拜的超市---线段树双重懒标记+二分
NowCoderTOP23-27 Binary tree traversal - continuous update ing
一次Spark SQL线上问题排查和定位
js右侧圆点单页滚动介绍页面
踩水坑2 数据超出long long
GVINS论文阅读笔记
Web系统常见安全漏洞介绍及解决方案-sql注入
OpenGL es 导读篇
Web系统常见安全漏洞介绍及解决方案-CSRF攻击
Flink1.15源码阅读——PER_JOB vs APPLICATION执行流程
Are postgresql range queries faster than index queries?
第七章
postgresql 范围查询比索引查询快吗?
第五章
js right dot single page scrolling introduction page
Chapter Six
Burndown chart of project management tools: Dynamic assessment of team work ability
【微信小程序开发】生命周期与生命周期函数