领域驱动设计:DDD重构中台业务模型

news2025/3/1 21:30:43

文章目录

    • 如何避免重复造轮子?
    • 如何构建中台业务模型?

如何避免重复造轮子?

  • 要避免重复建设,就要理解中台的理念和思想。“中台是企业级能力复用平台”,“复用”用白话说就是重复使用,就是要避免重复造轮子的事情。
  • 中台的设计思想与“高内聚、低耦合”的设计原则是高度一致的。高内聚是把相关的业务行为聚集在一起,把不相关的行为放在其它地方,如果你要修改某个业务行为,只需要修改一处。中台就是要这样做,按照“高内聚、松耦合”的原则,实现企业级的能力复用!
  • 你需要站在企业高度,将重复的需要共享的通用能力、核心能力沉淀到中台,将分离的业务能力重组为完整的业务板块,构建可复用的中台业务模型。前端个性能力归前端,后端管理能力归后台。建立前、中、后台边界清晰,融合协作的企业级可复用的业务模型。

如何构建中台业务模型?

  • 可以用 DDD 领域建模的方法来构建中台业务模型。你可以选择两种建模策略:自顶向下和自底向上的策略。具体采用哪种策略,需要结合具体情况来分析。

自顶向下的策略

  • 第一种策略是自顶向下。这种策略是先做顶层设计,从最高领域逐级分解为中台,分别建立领域模型,根据业务属性分为通用中台或核心中台。领域建模过程主要基于业务现状,暂时不考虑系统现状。自顶向下的策略适用于全新的应用系统建设,或旧系统推倒重建的情况
  • 由于这种策略不必受限于现有系统,你可以用 DDD 领域逐级分解的领域建模方法。从下面这张图我们可以看出它的主要步骤:第一步是将领域分解为子域,子域可以分为核心域、通用域和支撑域;第二步是对子域建模,划分领域边界,建立领域模型和限界上下文;第三步则是根据限界上下文进行微服务设计。

在这里插入图片描述
自底向上的策略

  • 第二种策略是自底向上。这种策略是基于业务和系统现状完成领域建模。首先分别完成系统所在业务域的领域建模;然后对齐业务域,找出具有同类或相似业务功能的领域模型,对比分析领域模型的差异,重组领域对象,重构领域模型。这个过程会沉淀公共和复用的业务能力,会将分散的业务模型整合。自底向上策略适用于遗留系统业务模型的演进式重构

以互联网电商和传统核心应用的几个典型业务域为例,了解具体如何采用自底向上的策略来构建中台业务模型,主要分为这样三个步骤。

  • 第一步:锁定系统所在业务域,构建领域模型。
    • 锁定系统所在的业务域,采用事件风暴,找出领域对象,构建聚合,划分限界上下文,建立领域模型。看一下下面这张图,我们选取了传统核心应用的用户、客户、传统收付和承保四个业务域以及互联网电商业务域,共计五个业务域来完成领域建模。
    • 从下面这张图中,我们可以看到传统核心共构建了八个领域模型。其中用户域构建了用户认证和权限两个领域模型,客户域构建了个人和团体两个领域模型,传统收付构建了 POS 刷卡领域模型,承保域构建了定报价、投保和保单管理三个领域模型。互联网电商构建了报价、投保、订单、客户、用户认证和移动收付六个领域模型。
    • 在这些领域模型的清单里,我们可以看到二者之间有很多名称相似的领域模型。深入分析后会发现,这些名称相似的领域模型存在业务能力重复,或者业务职能分散(比如移动支付和传统支付)的问题。那在构建中台业务模型时,你就需要重点关注它们,将这些不同领域模型中重复的业务能力沉淀到中台业务模型中,将分散的领域模型整合到统一的中台业务模型中,对外提供统一的共享的中台服务。

在这里插入图片描述

  • 第二步:对齐业务域,构建中台业务模型。
    • 在下面这张图里,你可以看到右侧的传统核心领域模型明显多于左侧的互联网电商,那我们是不是就可以得出一个初步的结论:传统核心面向企业内大部分应用,大而全,领域模型相对完备,而互联网电商面向单一渠道,领域模型相对单一。
    • 这个结论也给我们指明了一个方向:首先我们可以将传统核心的领域模型作为主领域模型,将互联网电商领域模型作为辅助模型来构建中台业务模型。然后再将互联网电商中重复的能力沉淀到传统核心的领域模型中,只保留自己的个性能力,比如订单。中台业务建模时,既要关注领域模型的完备性,也要关注不同渠道敏捷响应市场的要求。

构建多业务域的中台业务模型的过程,就是找出同一业务域内所有同类业务的领域模型,对比分析域内领域模型和聚合的差异和共同点,打破原有的模型,完成新的中台业务模型重组或归并的过程。

业务域重构后的中台业务模型

  • 第三步:中台归类,根据领域模型设计微服务。
    • 完成中台业务建模后,我们就有了下面这张图。从这张图中我们可以看到总共构建了多少个中台,中台下面有哪些领域模型,哪些中台是通用中台,哪些中台是核心中台,中台的基本信息等等,都一目了然。你根据中台下的领域模型就可以设计微服务了。
      在这里插入图片描述

你知道的越多,你不知道的越多。

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

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

相关文章

深入解析OLED透明屏的工作原理与优势,智能家居的未来之选

OLED透明屏作为一项突破性的显示技术,不仅具备出色的视觉效果,还带来了全新的功能和应用。 在这篇文章中,尼伽将深入探讨OLED透明屏的功能特点,介绍其在各个领域的广泛应用,并提供实用的案例和数据,希望看…

认识 Express

1. 初识 Express 1.1 Express 简介 1. 什么是 Express 官方给出的概念:Express 是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。 通俗的理解:Express 的作用和 Node.js 内置的 http 模块类似,是专门用来创建 Web …

“批量随机字母命名文件,轻松管理你的文件库“

你是否曾经遇到过文件命名混乱,难以管理的问题?为了解决这个问题,我们推出了一款全新的文件改名工具,它可以帮助你批量给文件名添加一个随机字母,让你的文件库更加有序、易于管理。 首先第一步,我们要进入…

Python 交易指南:利用 RSI

一、说明 RSI是相对强弱指数(Relative Strength Index)的缩写,是一种技术指标。该指标是用来测量股票或其他交易品种的价格波动强度和速度的,属于动量型指标。RSI常用于技术分析和交易策略中,可以帮助交易者判断市场的…

JAVA 的四种访问权限

在Java编程中,访问权限是非常重要的概念,因为它可以保证代码的安全性和封装性。访问权限有四种,分别是public、protected、default和private。 private:如果一个类的方法或者变量被private修饰,那么这个类的方法或者变…

程序执行的四个阶段

程序执行的四个阶段 对于一段helloc.c的程序 #include <stdio.h>int main() {printf("hello, world\n");return 0; }为了在系统上运行程序&#xff0c;每条C语句都必须被其他程序转化为一系列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序的格…

网络层--IP协议

引入&#xff1a; IP协议主要解决什么问题呢&#xff1f; IP协议提供一种将数据从主机&#xff21; 发送到 主机&#xff22;的能力。&#xff08;有能力不一定能做到&#xff0c;比如小明很聪明&#xff0c;可以考100分&#xff0c;但是他也不是每次搜能考100分&#xff0…

持安科技入选数说安全《2023中国网络安全市场年度报告》

近日&#xff0c;网络安全产业研究平台数说安全发布《2023中国网络安全市场年度报告》&#xff0c;报告共分为158页核心报告&#xff0c;及番外篇《网安融资新星及融资过亿企业介绍》&#xff0c;作为以甲方身份创业的零信任办公安全明星企业&#xff0c;持安科技以网安融资新星…

【leetcode 力扣刷题】重复叠加字符串匹配

重复叠加字符串匹配 686. 重复叠加字符串匹配 686. 重复叠加字符串匹配 题目链接&#xff1a;686. 重复叠加字符串匹配 题目内容&#xff1a; 理解题意&#xff0c;可以发现题目还是要求我们做字符串匹配。只是查询串不是简单的a&#xff0c;而是a的叠加&#xff0c;并且这个…

国外LEAD收款渠道介绍:Wise收款教程

在国内做国外的Affiliate marketing&#xff0c;收款还是有些麻烦的。以前用Payoneer挺方便&#xff0c;包括clickbank&#xff0c;amazon等联盟都挺顺利的回款&#xff0c;不过自从Digitalstore24的一笔联盟款发送之后&#xff0c;没有到账&#xff0c;然后就收到款项需要审核…

windows下安装redis扩展库

1.根据PHP版本号&#xff0c;编译器版本号和CPU架构 选择php_redis和php_igbinary文件(如果是选择线程的情况下需要再去配置php5ts.dll) windows.php.net - /downloads/pecl/releases/redis/ windows.php.net - /downloads/pecl/releases/igbinary/ php_igbinary-3.1.2-7.2-…

webgl与webgpu比较

绘制流程 webgl无论是操作着色器&#xff0c;还是操作 VBO&#xff0c;亦或者是创建一些 Buffer、Texture 对象&#xff0c;基本上都得通过 gl 变量一条一条函数地走过程&#xff0c;顺序是非常讲究的。每一次调用 gl.xxx 时&#xff0c;都会完成 CPU 到 GPU 的信号传递&#…

【LeetCode】210. 课程表 II——拓扑排序

题目链接&#xff1a;210. 课程表 II 题目描述&#xff1a; 现在你总共有 numCourses 门课需要选&#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites &#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示在选修课程 ai 前 必须 先选修 bi 。 例如…

CAPL自动化测试通信电压

通信电压 1、系统框架2、控制电压模块3、检查通信是否正常4、检查电压标准5、CAPL 控制VH1160的函数 分三个模块 控制电源模块&#xff0c;分析通信是否正常模块&#xff0c;判断电压是否符合标准。 1、系统框架 应该分为三大模块&#xff1a;控制电压模块&#xff0c;检查通…

国内 Docker 镜像加速器和国内公共镜像仓库那些事

前言 首先我们知道&#xff0c;全球最大的公共镜像仓库是 Docker 公司自己搭建的 Docker Hub&#xff0c;也是权威性最高的&#xff0c;里面包含了各种各样的官方镜像&#xff0c;Docker Hub 为每一个注册用户提供了个人镜像仓库服务&#xff0c;该个人镜像仓库是公共的。 以上…

如何用echarts画一个好看的饼图

前言 最近有个需求&#xff0c;需要绘制一个饼图&#xff0c;为此我根据这次需求来整理了一下关于 echarts 饼图绘制的一些知识点&#xff0c;在这次需求中我需要用到的属性我会详细讲解&#xff0c;其他的属性我会粗略地说一下&#xff08;并加入其他博主的文章的跳转&#x…

【C++杂货铺】探索stack和queue的底层实现

文章目录 一、stack的介绍和使用1.1 stack的介绍1.2 stack的使用1.2.1 最小栈1.2.2 栈的压入、弹出序列1.2.3 逆波兰表达式求值1.2.4 用栈实现队列 二、queue的介绍和使用2.1 queue的介绍2.2 queue的使用2.2.1 二叉树的层序遍历 三、模拟实现3.1 stack模拟实现3.2 queue模拟实现…

数分面试题2-牛客

1、面对大方差如何解决 1&#xff0c;AB实验场景下&#xff0c;如果一个指标的方差较大表示它的波动较大&#xff0c;那么实验组和对照组的显著差异可能是因为方差较大即随机波动较大。解决方法有&#xff1a;PSM方法、CUPED(方差缩减) PSM代表"Propensity Score Matchin…

【C进阶】分析 C/C++程序的内存开辟与柔性数组(内有干货)

前言&#xff1a; 本文是对于动态内存管理知识后续的补充&#xff0c;以及加深对其的理解。对于动态内存管理涉及的大部分知识在这篇文章中 ---- 【C进阶】 动态内存管理_Dream_Chaser&#xff5e;的博客-CSDN博客 本文涉及的知识内容主要在两方面&#xff1a; 简单解析C/C程序…

CSS宽度问题

一、魔法 为 DOM 设置宽度有哪些方式呢&#xff1f;最常用的是配置width属性&#xff0c;width属性在配置时&#xff0c;也有多种方式&#xff1a; widthmin-widthmax-width 通常当配置了 width 时&#xff0c;不会再配置min-width max-width&#xff0c;如果将这三者混合使…