领域驱动设计--多维度规划业务架构(三)

2024-08-21 23:58

本文主要是介绍领域驱动设计--多维度规划业务架构(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

领域驱动设计的社区主流声音是划分问题空间(Problem Space)与解空间(Solution Space)。整个问题空间实际上就是团队开发的目标系统对应的领域,这实际上也是业务架构要描述的目标。领域驱动设计解决大规模问题空间的方法或模式是引入子领域(Subdomain)。

根据价值高低的不同,子领域分为核心子领域支撑子领域通用子领域。若将其引入到业务架构,似乎可以根据价值高低建立不同的服务层,例如:

  • 核心子领域:产品服务层,体现为子领域专用的产品服务

  • 支撑子领域:能力服务层,体现为跨子领域复用的能力服务

  • 通用子领域:基础服务层,体现为与领域无关的基础服务

不同的层次代表了复用的粒度和水平。基础服务层因为与领域无关,它复用的范围更广泛,对应为业务架构中的支撑业务(支撑部门提供的职能),如财务体系、人力资源体系、行政体系、采购体系等。原则上,任何企业都需要这些支撑业务,而与企业从事的领域方向无关。引入领域驱动设计的概念,我将其纳入到通用子领域的范畴。

企业核心业务对应为核心子领域,对外公开为一个个相对完整的产品服务。一个产品服务可以认为对应一个核心子领域。在识别核心子领域(产品服务)的过程中,我们需要遵循能力复用的原则,尝试去寻找那些可以跨子领域复用的业务能力,然后自上而下进行沉淀,从而形成映射支撑子领域的能力服务层。

以上内容,我称之为领域维度的业务架构规划,如下图所示:

图片

从商业维度,Gartner定义了Pace-Layered Architecture,如下图所示:

图片

它按照变化速率将企业应用分为了三个层次:

  • 创新型系统,SoI(System of Innovation)

  • 差异型系统,SoD(System of Difference)

  • 记录型系统,SoR(System of Record)

Gartner分别从变化频率、生命周期、规划远景、治理模型、利益相关者、资金和架构七个角度阐述了各个层次的特征与属性。

商业维度的划分依据可以对领域维度的业务架构规划进行指导与调整,当然,它们之间也存在若有若无的映射关系,形成了如下图所示的商业维度的业务架构规划

图片

子领域的划分在业务架构规划的每个层次形成各自的子领域,它是分解问题空间的最高抽象层次(依据分解粒度),我将其称之为“业务领域”。在业务领域之下,是由业务服务组成的业务组件。

这里的业务服务与业务组件是我自己提出的定义,并非业务架构知识体系中的概念:名称相同,含义并不完全相同。

业务架构的业务服务“表示显式定义的暴露业务行为,代表了用于实现组织内外客户需求的服务,并处理主体与主体之间、主体和客体之间的连接物”。这一定义没有清晰地说明业务服务到底是什么,也没有明确划分依据,无法确定其设计粒度。我在《解构领域驱动设计》一书中明确指出了业务服务的定义,即它是“角色主动向目标系统发起服务请求,完成一次完整的功能交互,体现了服务价值的业务行为”,如下图所示:

图片

基于这一定义,可以确定业务服务的粒度与层次。

在业务架构知识体系中,IBM提出了业务组件模型,“采用目标、资源、活动、治理、服务5个标准属性来表达能力以及能力之间的关系”。我所定义的业务组件其本质实际是业务角度的限界上下文。

通常认为,限界上下文属于解空间的DDD模式,但在识别限界上下文时,实际上首先是从业务角度对基本的业务单元(即业务服务)进行归类与归纳。在规划业务架构时,如果我们仅将限界上下文视为领域模型的知识语境边界,不去考虑技术实现的内容,那么,将其映射为业务架构的业务组件也未尝不可。

由此,就形成了业务领域-业务组件-业务服务的分析粒度层次,我将其称之为分析维度的业务架构规划,它是业务架构映射为应用架构的基础,使得整个企业架构具备了落地的可能性。这一维度的业务架构规划如下图所示:

图片

领域维度的判断依据是领域价值的高低,商业维度的主要判断依据是变化速率和规划愿景,它们共同映射为不同服务层次进行规划的业务架构,最后从分析维度对每个服务层次的业务逻辑进行切分与细化,为业务架构映射为应用架构提供落地实现的基础。

❀❀❀

图片

☼ 素履之往:2021年6月15日晚,摄于成都太古里。

这篇关于领域驱动设计--多维度规划业务架构(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d