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

news2024/11/25 15:00:49

目录

一、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: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.coloradmin.cn/o/1817097.html

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

相关文章

小程序无法调用服务端问题排查

1、问题描述 突然有一天线上的小程序不能登录,经查小程序无法调用。经查无法小程序页面无法调用后台服务。 2、排查过程 由于无法登录小程序发布服务器,无法测试小程序前端服务器到服务端网络,并且小程序无法看到日志。所以就得从服务端和网…

使用CSS、JavaScript、jQuery三种方式实现手风琴效果

手风琴效果有不少,王者荣耀官网(源网址 https://pvp.qq.com/raiders/ )有一处周免英雄,使用的就是手风琴效果,如图所示。 我试着用css、js、jQuery三种方式实现了这种效果,最终效果差不多,美中不…

IDEA创建简单web(servlet)项目(server为tomcat)

引言 鉴于网上很少有关于IDEA开发servlet项目的教程(24版idea,并且servlet技术十分复古,很少有人用到,能够理解,该文章旨在为在校的学生提供一个参考,项目技术简单)本人在此总结从头开始到项目…

MATLAB算法实战应用案例精讲-【数模应用】有序Logit(Logistic)分析

目录 算法原理 logit回归分析步骤 二元logit分析 多分类logit分析 有序logit分析 总结 SPSS 1、问题与数据 2、对数据结构的分析 3、SPSS分析方法 SPSSAU 有序Logit回归案例 1、背景 2、理论 3、操作 4、SPSSAU输出结果 5、文字分析 6、剖析 疑难解惑 提示…

Joplin Typora 粘贴图片 | 当使用Typora作为Joplin编辑器时,如何粘贴图片并上传到Joplin服务器,替换链接

一、背景 当我们使用Joplin时,上传图片时会自动上传到Joplin服务器并替换链接 但是Joplin的编辑器不好用,我更习惯用Typora来编辑, 然而Typora中上传的图片只能在本地,无法上传到Joplin服务器,在其他客户端也看不到图片…

迈向『闭环』| PlanAgent:基于MLLM的自动驾驶闭环规划新SOTA!

中科院自动化所深度强化学习团队联合理想汽车等提出了一种新的基于多模态大语言模型MLLM的自动驾驶闭环规划框架—PlanAgent。该方法以场景的鸟瞰图和基于图的文本提示为输入,利用多模态大语言模型的多模态理解和常识推理能力,进行从场景理解到横向和纵向…

若依RuoYi-Vue分离版—免登录直接访问

若依RuoYi-Vue分离版—免登录直接访问 如何不登录直接访问前端:后端:方法1:在SecurityConfig.java中设置httpSecurity配置匿名访问方法2:在对应的方法或类上面使用Anonymous注解。 如何不登录直接访问 官网有说明:如何不登录直接…

pyechart 创建柱形图

Pyecharts 是一个基于 Python 的开源数据可视化库,用于创建各种交互式的图表和可视化效果。它是在 Echarts 的基础上进行封装和优化,Echarts 是一个流行的 JavaScript 数据可视化库pyecharts 中文网站 : https://pyecharts.org/# pyecharts 模块 还支持…

day35| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

文章目录 前言860.柠檬水找零思路方法一 406.根据身高重建队列思路方法一 452. 用最少数量的箭引爆气球思路方法一 总结 前言 860.柠檬水找零 思路 很简单,贪心只有一个,如果20优先用105找零,因为5更加万能一些 方法一 class Solution(ob…

RabbitMQ实践——配置Prometheus和Grafana报表

大纲 启用rabbitmq_prometheus插件安装启动Prometheus创建用户下载并解压修改配置启动 安装启动grafana安装启动配置数据源 在《RabbitMQ实践——在Ubuntu上安装并启用管理后台》中我们已经安装成功RabbitMQ及其管理后台。在此基础上,我们将打通它和Prometheus、Gra…

26.0 Http协议

1. http协议简介 HTTP(Hypertext Transfer Protocol, 超文本传输协议): 是万维网(WWW: World Wide Web)中用于在服务器与客户端(通常是本地浏览器)之间传输超文本的协议.作为一个应用层的协议, HTTP以其简洁, 高效的特点, 在分布式超媒体信息系统中扮演着核心角色. 自1990年提…

Python图像处理——基于Pytorch框架ResNet152特征提取的MNIST手写数字识别

1. 数据集介绍 MNIST手写数字数据集: http://yann.lecun.com/exdb/mnist/ MNIST 数据集一共有 7 万张图片,其中 6 万张是训练集, 1 万张是测试集。每张图片是 28 28 的 0−9 的手写数字图片组成。每个图片是黑底白字的形式,黑底…

【全开源】餐饮点餐小程序源码(ThinkPHP+FastAdmin+Uniapp)

🍽️餐饮点餐小程序:让美食触手可及 一款基于ThinkPHPFastAdminUniapp开发的点餐小程序,支持单人点餐,还满足多人协同点餐(高级授权),支持多门店管理,并提供先吃后付和先付后吃两种支付方式。​ &#x1…

桌面应用开发框架比较:Electron、Flutter、Tauri、React Native 与 Qt

在当今快速发展的技术环境中,对跨平台桌面应用程序的需求正在不断激增。 开发人员面临着选择正确框架之挑战,以便可以高效构建可在 Windows、macOS 和 Linux 上无缝运行的应用程序。 在本文中,我们将比较五种流行的桌面应用程序开发框架&…

C#开源项目推荐:Watt Toolkit跨平台游戏工具箱支持github网络加速

Watt Toolkit是一个开源跨平台的多功能游戏工具箱,主要专注于增强玩家在Steam平台上的游戏体验及国外网站平台加速。 主要功能 兼容性 用户数据 团队背景 github加速功能 使用方法:用户只需在Watt Toolkit中启用网络加速功能,并选择对Gi…

揭秘Netflix背后的魔法:如何用三层架构打造个性化推荐帝国

推荐系统就像一家餐厅的菜单推荐 想象一下,你走进一家餐厅,面对琳琅满目的菜单,不知道点什么好。这时候,服务员给你推荐了几道菜,这些推荐是基于你以往的口味偏好和其他顾客的选择。Netflix的推荐系统也是类似的&…

Matlab图像处理——细胞图像的分割和计数显示

一. 项目介绍 使用MATLAB编写的细胞图像分割及计数系统,实现了对图像内细胞的计数,以及对每个细胞周长和面积的测量,并分别展示了分割后的每个细胞的图像。实验步骤共分为图像预处理、图像预分割、空洞填充、黏连细胞分割、细胞个数统计、细胞…

计算机毕业设计师hadoop+spark+hive知识图谱医生推荐系统 医生数据分析可视化大屏 医生爬虫 医疗可视化 医生大数据 机器学习 大数据毕业设计

流程: 1.Python爬虫采集中华健康网约10万医生数据,最终存入mysql数据库; 2.使用pandasnumpy/hadoopmapreduce对mysql中的医生数据进行数据分析,使用高德地图解析地理位置,并将结果转入.csv文件同时上传到hdfs文件系统&…

易天全面搭建ERP和MES系统:推进数字化转型的战略布局

在数字化浪潮的推动下,企业对于提高生产效率、优化资源配置、降低运营成本的需求日益迫切。ERP管理软件像一条纽带,将采购、生产、成本、库存、分销、运输、财务、人力资源进行规划,从而达到最佳资源组合,取得最佳效益。早在2019年…

MyBatis进行模糊查询时SQL语句拼接引起的异常问题

项目场景: CRM项目,本文遇到的问题是在实现根据页面表单中输入条件,在数据库中分页模糊查询数据,并在页面分页显示的功能时,出现的“诡异”bug。 开发环境如下: 操作系统:Windows11 Java&#…