DDD领域应用理论实践分析回顾

目录

一、DDD的重要性

(一)拥抱互联网黑话(抓痛点、谈愿景、搞方法论)

(二)DDD真的重要吗?

二、领域驱动设计DDD在B端营销系统的实践

(一)设计落地步骤

(二)战略设计实践

开始事件风暴用例分析,根据业务玩法反复确定对应用例(必要时采用二八原则)

分析名词动词找出关键和初始边界界限,抽取概念统一语言

梳理关系确定领域范围

确定营销领域后开始划分和分析

验证概念模型

(三)战术设计实践

从概念模型到对象模型确定实体和值对象

实体和值对象分析确定营销系统的聚合根

正确认识服务协作并整体落地

(四)代码架构实践

三、大众点评交易系统DDD应用

参考文章


干货分享,感谢您的阅读!本次不做基本概念的讲解,基本概念和理解可见一下推荐博客:

主要内容链接阅读

领域驱动实践基本理论总结与分析

领域驱动实践总结(基本理论总结与分析V+架构分析与代码设计+具体应用设计分析)_领域驱动设计案例分析报告-CSDN博客

领域驱动实践架构分析与代码设计

领域驱动实践总结(基本理论总结与分析+架构分析与代码设计V+具体应用设计分析)_l领域驱动实践总结-CSDN博客

领域驱动实践具体应用设计分析

领域驱动实践总结(基本理论总结与分析+架构分析与代码设计+具体应用设计分析V)_领域驱动编程 实践-CSDN博客

一、DDD的重要性

(一)拥抱互联网黑话(抓痛点、谈愿景、搞方法论)

互联网黑话通常带有一种神秘和高深莫测的感觉,能够吸引人们的注意力,让人们觉得自己参与的是一个非常前沿和高大上的事情。比如说,简单的“数据分析”听起来平平无奇,但一旦换成“大数据赋能”,是不是立刻高大上?

《拥抱毒瘤 DDD》黑话神化举例

有一家公司,由于研发的人数有限,但是活儿很多,分散在多个系统之间。研发部门研究出来的结论是:要聚焦,集中力量到核心系统上。怎么办?不能在PPT上干巴巴的写上聚焦两个字吧,那显得多LOW。

思来想去,突然灵机一动。要不,我们造点名词吧。按照级别,分它个CVP系统、IVP系统、EVP系统。这样,一下子逼格就上升了不少。

看不懂这些名词?看不懂就对了,因为这是我造的,要的就是看不懂这种效果。

看看下面这张图,我们甚至可以赋予它属性,把系统归类到这三类之中。

重要的是,业务系统的聚焦,摇身一变,成为了CVP的重点建设。哈哈,比起一句话就完事的决策,我们这下可以聊很久了。

“教你怎么说话十分钟,等于什么都没说”。这是一种非常重要的能力。

DDD互联网黑话推广

回归到DDD,其实其确实有点像互联网黑话(抓痛点、谈愿景、搞方法论)推广思路:

第一步,抓痛点想象一下,你的客户是一个开发团队的负责人,总是因为复杂的业务逻辑和代码混乱而头疼。而你呢,正好推荐DDD。抓住他们的痛点,让他们觉得生活离不开DDD。话术安排:“你是不是经常因为业务逻辑复杂,代码难以维护而烦恼?DDD正是为了解决这些问题而设计的。它能够帮助你理清业务逻辑,让代码更清晰、更易于维护。”

第二步,谈愿景不仅仅是告诉他们DDD能解决眼前的问题,还要画个大饼:“有了DDD,你的整个开发流程将变得井井有条,团队协作更高效,未来所有的项目都能顺利上线!”让他们看见美好的明天。话术安排:“采用DDD之后,未来你们的开发流程将会更加流畅。业务逻辑将被清晰地映射到代码中,每个团队成员都能明确自己的职责。无论多复杂的项目,都能轻松驾驭,快速上线。”

第三步,搞方法论提供一套神乎其神的方法论,比如“只需三步,让你的项目焕然一新!”让他们觉得你不是在卖概念,而是在传授武功秘籍。话术:“通过三步走策略,快速掌握DDD:1.领域建模:识别核心业务领域,定义领域模型。2.代码实现:将领域模型映射到代码结构,保证业务逻辑清晰。3.持续优化:通过领域事件和聚合根,不断优化和重构,提升代码质量。”

(二)DDD真的重要吗?

DDD(领域驱动设计)其实就是把软件开发中的业务问题用清晰的语言和模型直接反映在代码里,确保开发团队和业务专家说的都是一回事儿。

假设你在开发一个电商平台。没有DDD时,订单处理、库存管理、用户管理等逻辑可能混在一起,代码乱成一团。用DDD后,你把这些业务逻辑分别建模,比如:

  • 订单领域:专门处理订单创建、支付、取消等。
  • 库存领域:负责库存增加、减少、查询等。

每个领域都有明确的职责和边界。比如,订单领域中的“支付”只需调用库存领域的“减少库存”,不需要知道具体的库存操作细节。可以看到其直观好处:

  1. 沟通更顺畅:开发人员和业务人员都明白“订单”该怎么处理,沟通起来没障碍。
  2. 维护更容易:各个领域代码独立,修改库存逻辑不会影响订单逻辑。
  3. 扩展更灵活:想加新功能,比如优惠券,只需新增一个领域,其他逻辑不受影响。

简单说,DDD就像是给你的代码搭建了一个有条理的“仓库”,每个“货架”放什么清清楚楚,找起来方便,改起来不乱。

所以,个人依在这场黑话和营销中选择站队DDD,当前前提是应对复杂的业务,其重要性我觉得其主要有三点:

  1. 抓住业务本质:DDD让开发人员和业务专家用同一种语言交流,确保大家对业务逻辑的理解一致。
  2. 提升开发效率:通过明确的领域模型,减少了沟通误差,代码更容易维护和扩展。
  3. 快速应对变化:业务需求变化时,只需调整模型,代码也能灵活变动。

自身工作中的案例相对而言是不能对外的,但这边以一些业内公开的案例来重新体会下DDD的魅力。

二、领域驱动设计DDD在B端营销系统的实践

(一)设计落地步骤

  • 战略设计:确定用例,统一语言和划分边界。(事件风暴+统一语言+限界上下文和映射)
  • 战术设计:概念模型转化成类(代码)模型。(实体+值对象+聚合+领域服务+事件等)
  • 代码架构:将系统设计映射为系统实现。(六边形架构(Hexagonal Architecture)/ 洋葱架构/分层架构+事件驱动机制)

(二)战略设计实践

开始事件风暴用例分析,根据业务玩法反复确定对应用例(必要时采用二八原则)

分析名词动词找出关键和初始边界界限,抽取概念统一语言

梳理关系确定领域范围

确定营销领域后开始划分和分析

营销系统基于问题域拆解为五个子域(活动域,权益域,人群域,推送域,数据域),每个子域解决特定的问题,各子领域相对内聚和简单

将外部概念映射到营销域,通过防腐层来对接外部服务来实现这种映射

验证概念模型

通常用两个方法:

  1. 场景走查:把模型代入到所有的场景确认一遍,确定所抽象出来的概念模型和统一语言能正确描述它。
  2. 业务预判:未来业务的变化会在哪里,当变化发生时,概念模型的内涵和外延是否方便扩展并支持到变化。

(三)战术设计实践

战略设计得到了概念模型,战术设计则是将概念模型映射为代码模型,有很多编程范式,比如事务脚本、表模式、面向对象,函数式等,最好的方式是面向对象的实现。这里不做展开分析。

从概念模型到对象模型确定实体和值对象

  • 首先,概念是分层的,如营销活动是一个泛化概念,其下还有充值送活动、消费返活动,买赠活动等具体活动。构建对象模型时,通过派生/继承来实现概念分层。
  • 其次,概念关系映射成对象关系,比如营销活动包含了档位和库存,那在构建营销活动对象时,可通过组合实现这种包含关系(档位对象和库存对象成为营销活动对象的属性)。
  • 最后,概念的属性行为,可以直接变成对象的属性和行为;概念的状态机以及生命周期也会变成对象的状态机。

实体和值对象分析确定营销系统的聚合根

聚合根的设计要遵循一定的原则:

  1. 满足业务一致性、数据完整性、状态一致性。比如库存档位和活动状态要一致,在数据上也要完整,不存在没有档位的活动,也不存在没有库存的活动。
  2. 技术限制。有些实体会带来技术挑战,如数据量太大,可抽出来单独考虑。
  3. 业务逻辑不灭,在业务封装与适度的职责边界之间寻找平衡。不管是大聚合根还是小聚合根,业务逻辑永远都是存在的,就是看把它放在哪里。

正确认识服务协作并整体落地

(四)代码架构实践

依据领域驱动实践架构分析与代码设计,进行分层架构落地如下:

三、大众点评交易系统DDD应用

以上可以回忆我们整体的流程,虽有变动但方法论不会太有很大变化,这里不做细分了。

参考文章

领域驱动实践总结(基本理论总结与分析+架构分析与代码设计V+具体应用设计分析)_l领域驱动实践总结-CSDN博客

领域驱动实践总结(基本理论总结与分析+架构分析与代码设计+具体应用设计分析V)_领域驱动编程 实践-CSDN博客

领域驱动实践总结(基本理论总结与分析V+架构分析与代码设计+具体应用设计分析)_领域驱动设计案例分析报告-CSDN博客

拥抱毒瘤 DDD!

DDD 对决:事务脚本 vs 领域模型,哪个才是业务优化的终极方案?

老板:给我按 DDD 设计这个新项目~

领域驱动设计DDD在B端营销系统的实践 - 美团技术团队

DDD在大众点评交易系统演进中的应用 - 美团技术团队

领域驱动设计在互联网业务开发中的实践 - 美团技术团队

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/20038.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

读懂top后显示内容

第一行:系统信息 top - 06:33:12 up 42 min, 1 user, load average: 0.04, 0.02, 0.00 06:33:12:当前时间。up 42 min:系统已经启动了 42 分钟。1 user:当前有 1 个用户登录。load average: 0.04, 0.02, 0.00:这三个…

2024年第十四届APMCM亚太杯数学建模A题B题C题思路+代码解析汇总

2024年第十四届亚太地区大学生数学建模竞赛 开赛后第一时间更新解题思路代码参考文章! 点击链接加入群聊【2024亚太杯数学建模竞赛助攻】:http://qm.qq.com/cgi-bin/qm/qr?_wv1027&ksIq03p_73AYtWuH-bNy6VGD2652Um6y2&authKeyZsYwQzbxX0BKPyH…

Tomcat 如何管理 Session

Tomcat 如何管理 Session 我们知道,Tomcat 中每一个 Context 容器对应一个 Web 应用,而 Web 应用之间的 Session 应该是独立的,因此 Session 的管理肯定是 Context 级的,也就是一个 Context 一定关联多个 Session。 Tomcat 中主…

【ArcGISPro】使用AI模型提取要素-提取车辆(目标识别)

示例数据下载 栅格数据从网上随便找一个带有车辆的栅格数据 f094a6b1e205cd4d30a2e0f816f0c6af.jpg (1200799) (588ku.com) 添加数据

SpringBoot3_Web开发

4. 内容协商 一套系统适配多端数据返回 移动端:返回JSON数据第三方:返回XMLIoT:返回自定义协议数据 1. 默认规则 1. SpringBoot 多端内容适配 基于请求头内容协商 【默认】 客户端向服务端发送请求,携带HTTP标准的 Accept 请求…

Mysql篇-语句执行计划详解(explain)

概述 使用 explain 输出 SELECT 语句执行的详细信息,包括以下信息: 表的加载顺序 sql 的查询类型 可能用到哪些索引,实际上用到哪些索引 读取的行数 Explain 执行计划包含字段信息如下:分别是 id、select_type、table、partit…

.net 7.0 解决“The keyword field is required”的问题

在 .net 3.1项目的时候,使用 keyword 做 API 接口的模糊匹配,能够传入keyword “” 进行整表查询。但当我在 .net 7.0 项目中这么使用的时候,传入 keyword 不为空时能够进行匹配,但是当我传入 keyword “” 的时候就报错 “The …

高效语言模型 Parler-TTS 上线,一键完成文本转语音

Parler-TTS 是一种轻量级的文本转语音 (TTS) 模型,可以生成具有给定说话者风格的高质量、自然语音,自由度及创新性非常高,并且可以通过 Prompt 控制说话者的性别、音色、语调以及所处的场景(室内、室外、马路上、音乐厅等&#xf…

网络安全与防范

1.重要性 随着互联网的发达,各种WEB应用也变得越来越复杂,满足了用户的各种需求,但是随之而来的就是各种网络安全的问题。了解常见的前端攻击形式和保护我们的网站不受攻击是我们每个优秀fronter必备的技能。 2.分类 XSS攻击CSRF攻击网络劫…

JavaWeb——Maven、web入门

1. maven maven是一款用于管理和构建Java项目的工具,它基于项目对象模型(POM—Project Object Model)的概念,通过一小段描述信息来管理项目的构建。 1.1. 作用 1.1.1. 依赖管理 方便快捷的管理项目依赖的资源(jar包…

【前端学习笔记】Javascript学习二(运算符、数组、函数)

一、运算符 运算符(operator)也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。 JavaScript中常用的运算符有: 算数运算符、递增和递减运算符、比较运算符、逻辑运算符、赋值运算符 算数运算符: 、-…

【开源免费】基于Vue和SpringBoot的智慧食堂系统(附论文)

本文项目编号 T 629 ,文末自助获取源码 \color{red}{T629,文末自助获取源码} T629,文末自助获取源码 随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化,网络化和电子化。网…

基因组之全局互作热图可视化

引言 PlotHiC 是一个专为 Hi-C 数据可视化分析而设计的 Python 包。Hi-C 技术是一种能够检测染色体三维结构的实验方法,它能揭示 DNA 在细胞核内的三维组织结构。为了更好地展示和解释这些复杂的数据,PlotHiC[1] 可以帮助用户方便地绘制Hi-C 数据的热图。…

道本科技智慧合同管理平台,采用数字化技术帮助企业建立全生命周期的合同管理模式。

作为专业的企业合同管理平台建设专家,我们拥有丰富的实施经验和专业技术团队,致力于帮助企业搭建高效、安全的合同管理系统。我们的解决方案涵盖合同起草、审批、存储、分析和报告等多个环节,能够满足不同企业的多样化需求。 选择我们&#…

AmazonS3集成minio实现https访问

最近系统全面升级到https,之前AmazonS3大文件分片上传直接使用http://ip:9000访问minio的方式已然行不通,https服务器访问http资源会报Mixed Content混合内容错误。 一般有两种解决方案,一是升级minio服务,配置ssl证书&#xff0c…

QGIS使用WMS图层

目录 参考链接 参考链接 [1] 使用 WMS 数据 (QGIS3) 2023.8;

华为防火墙技术基本概念学习笔记

1.防火墙概述 1.1防火墙与交换机、路由器对比 路由器与交换机的本质是转发,防火墙的本质是控制。 防火墙与路由器、交换机是有区别的。路由器用来连接不同的网络,通过路由协议保证互联互通,确保将报文转发到目的地;交换机则通常用来组建局域…

面向FWA市场!移远通信高性能5G-A模组RG650V-NA通过北美两大重要运营商认证

近日,全球领先的物联网整体解决方案供应商移远通信宣布,其旗下符合3GPP R17标准的新一代5G-A模组RG650V-NA成功通过了北美两家重要运营商认证。凭借高速度、大容量、低延迟、高可靠等优势,该模组可满足CPE、家庭/企业网关、移动热点、高清视频…

idea maven 重新构建索引

当设置maven仓库为离线模式的时候,会出现一些问题。 比如本地的仓库被各种方式手动更新之后, 举例:我需要一个spring的包,在pmo文件中写好了引入包的代码 但是由于是离线模式没有办法触发自动下载,那么这个时候我可以…

React(二)

文章目录 项目地址七、数据流7.1 子组件传递数据给父组件7.1.1 方式一:給父设置回调函数,传递给子7.1.2 方式二:直接将父的setState传递给子7.2 给props传递jsx7.2.1 方式一:直接传递组件给子类7.2.2 方式二:传递函数给子组件7.3 props类型验证7.4 props的多层传递7.5 cla…