【领域驱动设计 打通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

相关文章

基于C++的UDP网络通信系统设计与实现详解

《基于C++的UDP网络通信系统设计与实现详解》在网络编程领域,UDP作为一种无连接的传输层协议,以其高效、低延迟的特性在实时性要求高的应用场景中占据重要地位,下面我们就来看看如何从零开始构建一个完整... 目录前言一、UDP服务器UdpServer.hpp1.1 基本框架设计1.2 初始化函数Init详解

java中4种API参数传递方式统一说明

《java中4种API参数传递方式统一说明》在Java中,我们可以使用不同的方式来传递参数给方法或函数,:本文主要介绍java中4种API参数传递方式的相关资料,文中通过代码介绍的非常详细,需要的... 目录1. 概述2. 参数传递方式分类2.1 Query Parameters(查询参数)2.2 Path

VSCode开发中有哪些好用的插件和快捷键

《VSCode开发中有哪些好用的插件和快捷键》作为全球最受欢迎的编程工具,VSCode的快捷键体系是提升开发效率的核心密码,:本文主要介绍VSCode开发中有哪些好用的插件和快捷键的相关资料,文中... 目录前言1、vscode插件1.1 Live-server1.2 Auto Rename Tag1.3

MySQL游标和触发器的操作流程

《MySQL游标和触发器的操作流程》本文介绍了MySQL中的游标和触发器的使用方法,游标可以对查询结果集进行逐行处理,而触发器则可以在数据表发生更改时自动执行预定义的操作,感兴趣的朋友跟随小编一起看看... 目录游标游标的操作流程1. 定义游标2.打开游标3.利用游标检索数据4.关闭游标例题触发器触发器的基

Agent开发核心技术解析以及现代Agent架构设计

《Agent开发核心技术解析以及现代Agent架构设计》在人工智能领域,Agent并非一个全新的概念,但在大模型时代,它被赋予了全新的生命力,简单来说,Agent是一个能够自主感知环境、理解任务、制定... 目录一、回归本源:到底什么是Agent?二、核心链路拆解:Agent的"大脑"与"四肢"1. 规划模

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大