DDD的模式与实践案例(4)

简介: DDD的模式与实践案例(4)

image.png


当我们要落地DDD的时候就会遇到一个问题DDD的很多东西都放在哪里,怎么跟框架进行结合,网上也很少有案例。技术组件知道都放在基础设施层里,但是其他代码元素比如dto,实体,值对象,仓库这些应该怎么放.怎么去匹配dubbo等技术框架,怎么跟其他层的代码元素进行交互完成业务逻辑。


这里其实借鉴了COLA架构和DDD分层架构来画的一张图。比较明显的是领域层是可以单独拿出来的.这也与之前的讲述是一致的.DDD建模就是要表达业务需求的核心内容,当作核来看待。因此这个领域层的Jar会被应用层和基础设施层分别引用。


image.png


前面几小节已经讲述了DDD的理论模式和业务架构风格,这里我们就进入实战环节,看看如何使用DDD来构建一个博客帖子平台。


image.png


这里使用四色建模法来构建模型图。限于篇幅我大概讲一下建模过程,先确定业务关键时刻,如上图的博客/帖子/微博等。然后针对这个对象产生了一些其他相关的业务活动,我们对这些相关的业务互动继续建模,为其添加角色和描述则得到了上图的建模内容。


image.png


我们用四色建模法得到的模型图来继续构建UML类图,在这个类图中我们对相关的业务对象抽象了一些业务行为,如上图。


image.png


这里借助cola分包的策略来构建博客帖子平台的整体工程包内容,另外这也相当于用了DDD的战术模式--模块模式


这里我们看一下发布博客帖子的时候涉及到哪些领域,以及这些领域的上下文关系,我们从这些领域的交互中能提炼哪些事件消息。


image.png


这里我们看一下发布博客的整体流程,假设这是有多个业务服务构成的业务流程,先由博客领域发起业务活动,


然后由下游的审批服务和运营服务辅助博客领域完成发布博客的业务操作。


image.png


在博客核心服务的内部,我们看一下运用CQRS模式来编写发布博客的整体业务调用流程。这里将博客核心服务分为四层进行建设,有区别的地方就在于读的地方是不一定要先走领域层再到基础设施层的,在松散分层架构下这种情况也是允许的。经过上面的实战之后,这里我也简单列一些关于DDD的最佳实践。如果要用DDD解决问题的话,我们需要做哪些内容呢,首先是团队整体需要认可DDD的思想有意愿用DDD。一个人玩DDD容易达到瓶颈。后续就可以按照DDD的一些模式来构建文档和代码,如此循环。


image.png


下面我们看一些DDD落地的策略,防止落地过程中出现各种各样的问题。对于第二,三,四点我要表达的意思就是说团队中不要因为这些架构,框架和规范的因素影响我们使用DDD。对DDD的理解不同的人有不同的看法有时候会有偏见,在进行DDD建模落地到代码的时候,就很容易导致问题。



image.png


image.png



相关文章
|
Oracle Java Unix
Java/JDK下载、安装与环境变量配置超详细教程(2022更新)保姆级,秒会
Java/JDK下载、安装与环境配置超详细教程(2022更新)保姆级,小白秒会[学习必备,建议收藏]。包含JDK8、JDK11、JDK17、JDK19等,本文将从JDK的下载与安装讲起,在从配置到第一个HelloWrold实践结束。在观看本文前我们需要知道JDK是什么,有什么作用?JDK是Java的开发工具包,包括JVM虚拟机,核心类库,开发工具。
27850 0
Java/JDK下载、安装与环境变量配置超详细教程(2022更新)保姆级,秒会
|
API Windows
怎么申请 bing api key
1:打开网址 https://login.live.com/ 注册帐号并登录(点击上图中的登录按钮即可),在新窗口点击下方的“立即注册”(有帐号的可以直接登录)2:填写相关信息(推荐使用hotmail邮箱),填写完毕后点击下方的 即可PS:国家或地区请勿选择‘中国’,否则会出现‘在你的市场中未提供...
21445 1
|
移动开发 JSON 前端开发
跨域资源共享(CORS):详解跨域请求的限制与解决方法
跨域资源共享(CORS):详解跨域请求的限制与解决方法
|
SQL 运维 数据挖掘
森马服饰从 Elasticsearch 到阿里云 SelectDB 的架构演进之路
森马引入阿里云 SelectDB 替换原 Elasticsearch + 业务库混合架构,统一分析 16+ 核心业务,打通 BI 组件,大幅简化数据同步链路和分析系统架构。实现复杂查询 QPS 提升 400%,响应时间缩短至秒级,亿级库存流水聚合查询缩短至 8 秒内的显著收益,有效驱动森马全渠道运营效率持续增长与业务创新。
377 0
森马服饰从 Elasticsearch 到阿里云 SelectDB 的架构演进之路
|
机器学习/深度学习 自然语言处理 监控
命名实体识别(Named Entity Recognition, NER)
命名实体识别(Named Entity Recognition, NER)
1245 0
|
存储 API Swift
一文秒懂什么是OpenStack?
一文秒懂什么是OpenStack?
1974 0
|
监控 网络协议 应用服务中间件
深入解析:如何确定网站使用的端口号
【10月更文挑战第21天】 在网络通信中,端口号是识别特定服务的关键。一个IP地址可以有多个端口,每个端口可能运行着不同的服务。当我们在浏览器地址栏输入一个网址时,实际上是通过特定的端口与服务器进行通信。本文将探讨如何确定一个网站使用的端口号,以及端口号在网络通信中的作用。
4234 4
|
人工智能 算法
图像伪造照妖镜!北大发布多模态LLM图像篡改检测定位框架FakeShield
北京大学研究团队提出了一种名为FakeShield的多模态框架,旨在解决图像伪造检测与定位(IFDL)中的黑箱问题及泛化能力不足。FakeShield不仅能评估图像真实性,生成篡改区域的掩码,还能提供像素级和图像级的篡改线索及详细文本描述,增强检测的可解释性。通过使用GPT-4o增强现有数据集,创建多模态篡改描述数据集(MMTD-Set),并引入领域标签引导的可解释伪造检测模块(DTE-FDM)和多模态伪造定位模块(MFLM),FakeShield在多种篡改技术的检测与定位上表现优异,为图像真实性维护提供了有力工具。
968 14
el-input实现后缀图标和clearable的兼容,调整el-input clearable与自定义图标展示位置问题
el-input实现后缀图标和clearable的兼容,调整el-input clearable与自定义图标展示位置问题
1257 1
|
JavaScript
vue 滑动拼图验证
vue 滑动拼图验证
446 1
vue 滑动拼图验证