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



相关文章
|
弹性计算 安全 关系型数据库
ECS实例问题之更新镜像后实例启动失败如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
3月前
|
关系型数据库 MySQL 数据库
如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程,附安装包)
手把手教你通过.dmg安装包在Mac上安装MySQL 8.0.20。含下载链接、详细安装步骤及服务启动方法,图文清晰,小白也能轻松完成数据库部署。(236字符)
|
27天前
|
数据采集 人工智能 监控
快速上手:LangChain + AgentRun 浏览器沙箱极简集成指南
AgentRun Browser Sandbox 是基于阿里云函数计算的云原生无头浏览器沙箱,为AI智能体提供安全、免运维的“上网”能力。支持Playwright/Puppeteer通过CDP协议远程控制,具备实时VNC可视化、高隔离性和Serverless弹性架构,广泛应用于网页自动化、数据采集、AI Agent赋能与端到端测试,助力Agentic AI高效落地。
|
监控 网络协议 应用服务中间件
深入解析:如何确定网站使用的端口号
【10月更文挑战第21天】 在网络通信中,端口号是识别特定服务的关键。一个IP地址可以有多个端口,每个端口可能运行着不同的服务。当我们在浏览器地址栏输入一个网址时,实际上是通过特定的端口与服务器进行通信。本文将探讨如何确定一个网站使用的端口号,以及端口号在网络通信中的作用。
2473 4
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
544 15
|
存储 API Swift
一文秒懂什么是OpenStack?
一文秒懂什么是OpenStack?
1768 0
|
Java 数据库连接 测试技术
SpringBoot 3.3.2 + ShardingSphere 5.5 + Mybatis-plus:轻松搞定数据加解密,支持字段级!
【8月更文挑战第30天】在数据驱动的时代,数据的安全性显得尤为重要。特别是在涉及用户隐私或敏感信息的应用中,如何确保数据在存储和传输过程中的安全性成为了开发者必须面对的问题。今天,我们将围绕SpringBoot 3.3.2、ShardingSphere 5.5以及Mybatis-plus的组合,探讨如何轻松实现数据的字段级加解密,为数据安全保驾护航。
1332 1
Antd——如何自定义月的选择范围
Antd——如何自定义月的选择范围
328 0
el-input实现后缀图标和clearable的兼容,调整el-input clearable与自定义图标展示位置问题
el-input实现后缀图标和clearable的兼容,调整el-input clearable与自定义图标展示位置问题
1096 1
|
Java 测试技术 Spring