【领域驱动设计 打通DDD最小闭环】DDD的开发流程、参与人员和统一语言

本文主要是介绍【领域驱动设计 打通DDD最小闭环】DDD的开发流程、参与人员和统一语言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一个学习阶段就是夯实基础,打通DDD的一个最小闭环,首先明确下DDD的最小闭环包含哪些步骤
在这里插入图片描述

开发流程

DDD的整体开发流程如下图所示,包含两个大的时间节点,模型的建立和模型的实现。
在这里插入图片描述
这样就是一个DDD的最小闭环,在实践中,尤其是对敏捷软件开发来说,这些步骤不是线性的,而是反复迭代、互相穿插的

战略设计阶段

也就是模型的建立阶段,使用的都是业务术语,归根结底来自业务人员,业务人员不仅能听懂,而且负责评价建模的正确性,所以必须由技术人员+业务人员共同主导

1 需求分析

在整个开发流程中,首先是要捕获行为需求,也就是传统软件工程里的“获取需求”。这一步,我们要识别需求里有哪些流程、哪些功能,每个功能由什么人操作,会产生什么结果,我们使用的分析方式是:业务事件风暴

2 领域建模

需求捕获完成后,接下来,我们就可以进行领域建模了,也就是通过建立领域模型,把需求里的主要业务知识描述清楚

战术设计阶段

也就是模型的实现阶段,业务人员不需要理解也不关注的,会包含技术实现方面的内容,所以由技术人员主导

3 架构设计

基于领域模型,我们就可以做架构设计,包括进程间和进程内的架构。比如说

  • 进程间架构:微服务设计、中台设计都属于进程间架构。
  • 进程内架构:通常说的 DDD 分层架构是进程内架构

对于项目实践来说,其实进程间可以理解为服务间的交互方式,进程内指的是服务内各个模块的交互方式。

4 数据库设计

依据架构设计进行对应的数据库表设计

5 代码实现

最后一步是按照设计完成代码编写。从这里也可以看的出来,代码实现其实是最容易的,一旦整体的设计成型了,代码实现就是水到渠成的事情,把文本语言翻译成计算机语言的过程。

参与人员

参与人员分为业务方和技术方,对于不同的业务,角色是不一定的

  • 领域专家:领域专家需要对业务有总体性和本质性的把握,同时对业务发展也要有一定前瞻性,对于商户可能就是:业务策略、商业分析师、运营、PA、PM等各种角色
  • 架构师及核心开发人员:要懂一些业务基础概念能够和业务讨论,了解相关业务模式,技术上一定要过硬。

核心就是这两方,不同阶段可能会有所补充,例如实现阶段可能会有一些基础RD、QA、FE等角色参与进来。

统一语言

在设计前一定要通过事件风暴形成UL语言表,确保大家对一件事物的理解是一致的,提到这个名词对它背后的含义和本质信息有共识,如果前期认知有GAP,后期实现阶段问题会被放大很多。

总结一下

其实我们日常开发都比较伪DDD,整体实现还是使用 MVC,代码结构类似 Controller、Service、DAO,个人认为这也无可厚非,只是代码的组织形式而已,关键是我们在整体设计时往往缺乏(领域建模-架构设计)这关键两步,很多时候都是就着一个功能点进行(需求分析-数据库 -> 代码实现)。这样没有全局的视角很容易盲人摸象,导致后续摸到一点打个补丁,项目难以维护。DDD的关键不全然是代码架构设计的指导,更是一种应对复杂业务的开发及协作模式,关键人员先通过UL建立有全局共识认知,不确认的地方预留扩展点,再进行穿插迭代式的小闭环补足认知和功能偏差更好些。

这篇关于【领域驱动设计 打通DDD最小闭环】DDD的开发流程、参与人员和统一语言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101040

相关文章

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超