业务架构设计模式

这篇具有很好参考价值的文章主要介绍了业务架构设计模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景介绍

我们是CRO面向商家的业务技术团队,做商家营商环境治理业务已经4年了。作为垂直型业务技术团体(区别于平台技术团队),我们也面临大部分业务技术团队的拷问:业务技术与平台技术的差别是什么?业务技术如何做?如何理解业务?如何在短频快的业务节奏中做好技术?部分问题有答案;部分依然在寻找更好的答案。本文是对过去四年的总结:从业务&技术两个角度提炼出一个基础思维框架,供业务线开发同学参考。

  • 业务视角:业务驱动技术是前台业务的特点,业务开发要逐渐培养自己全局视角看业务的能力:从交付价值角度理解业务模式;从能力规划角度掌握产品方向。本文的第一部分介绍价值引领业务架构的做法

  • 技术视角:应用架构的内容很大,本文第二部分介绍了架构设计的两种方法(风格),以及域划分和流程建模两个架构关注点

业务架构设计模式

业务架构

业务架构目的

业务架构范围比较大,本文借用“业务架构”这个词想讲的内容是:业务开发应该如何关注&分析业务问题;如何理解业务以及指导系统设计

业务架构做什么

业务架构最重要的是"看全局"(每个人立场/角度/高度不同,对“全局”的理解不同),这里强调的是:向外看的意识,而不是如何看的方法。从三个点出发看全局:

  • 看清楚 "":从宏观角度看“事”是价值源点,是业务战略&目标&价值;从微观来看“事”是业务流程。看清楚"事"就理解了“为什么做”和“怎么做”的2个核心问题。以我们做的业务为例:宏观的"事"就是帮助商家低成本处理风险问题,降低商家经营成本,提高平台竞争力;微观的“事”包括了商家风险预警流程,风险反馈流程等。的阶段尽量脱离具体系统/业务向高度和广度拓展视野。以风险预警为例:从广度上看,风险是如何识别的(有哪些上游),如何透出的(需要什么内容),怎么触达商家;从高度上看,有多少种风险可以预警(共性是什么),商家怎么处理(成本如何等),是否有更优的处理方式。

  • 理清楚 "": 谁(利益相关者一起做这件“事”。对利益相关者进行分类管理,识别用户的不同诉求,排序优先级。关键点是用户要什么(用户视角的,而不是外部视角)。

  • 分清楚 "": 不同"人“的权&责,在流程中的角色。从产品建设角度出发,人&权&责的识别为了深入了解用户诉求,设计产品能力。例如商家产品需要考虑商家不同角色员工的权&责,以及不同角色需要的产品功能。

业务架构怎么做

看清楚事-价值流/能力映射

价值流: 价值流是从利益相关者(客户、最终用户或工作所产生的产品、服务或交付品的接收者)的视角来描述描述一个端到端价值交付的完整过程。

业务能力: 业务能力是业务为实现特定目的或结果而可能拥有或交换的特定能力或产能

能力/价值流映射: 将业务能力映射到价值流中的每个阶段的过程,用于突出哪些能力对业务运营有着或大或小的重要性

分析价值流有助于从更宏观视角理解业务全过程:价值交付过程拆解成若干阶段,由不同的角色协作完成;每个阶段需要不同的能力。通过分析能力现状(完备,缺失,部分满足),评估价值&紧迫度,可以对未来规划形成构思。下图是Togaf招聘员工价值流的示例图,该图描述了招聘员工的完整流程和产品能力诉求,通过颜色区分不同能力的现状(绿色代表满足诉求;黄色代表部分满足;红色代表能力缺失)。

业务架构设计模式

理清楚人&责-角色分析

使用UML用例图描述业务中的"人"和责。营商业务里有3种角色,各角色责任如下图展示

业务架构设计模式

有了全局的人&责概览后,通过分析特定场景工作模式可以发现需求,问题或解决机会。这里的转变是:不只关注当前单个需求,而是从全局视角看业务诉求,从而对需求的合理性,重要性有更合理的判断;为设计方案提供业务视角考虑。例如下图例子描述员工招聘的工作模式。(从中可以看出入职阶段有提升较大空间)

业务架构设计模式

应用架构

架构:组件的结构、它们之间的相互关系,以及关于组件设计和随时间演变的原则和指南。

架构做的事情主要是:识别组件,定义关系,确定原则。组件和设计视角相关,不同视角下组件的形式/粒度:

  • DDD:子域就是组件,域之间的关系,域设计原则

  • 流程视角:流程,子流程,阶段都是组件;定义不同粒度下组件的交互关系和原则

  • 数据视角:数据表是组件,表之间的关系,和设计原则(范式和反范式)

  • 架构分层:层是组件,分层交互的关系和原则

  • ....

本文将介绍两种通用设计方法(自上而下,自下而上),以及领域建模和流程建模的相关知识。

架构方法

自上而下

自上而下设计是指参考标准方案,裁剪/适配形特定解决方案的过程。很多业务域已有标准模型或解决方案(例如财务域,电商,供应链等),这些业务域采用自上而下方法是一个不错的选择。设计师经验丰富/知识面广适合采用该方法;当然如果设计师经验不足,也可主动调研后实践。在大部分业务自上而下方法使用不多,不详细展开。

自下而上

自上而下设计是指从具体的业务细节出发,分析归纳最后得出解决方案的过程。自下而上是我们在日常业务中经常使用的方法,本文重点介绍如何做自下而上的设计。

自下而上"三板斧"

我们从实践总结出自下而上设计的"三板斧",作为框架指导设计过程:

业务架构设计模式

第一招:自下而上做归纳

分析问题空间,通过归纳分类减少复杂度。分为两个过程:场景梳理 和 场景分类

  • 场景梳理:罗列所有问题细节。例如:流程建模先罗列所有子流程;领域建模先罗列所有域内概念

  • 场景分类:划分类型,合并同类项。找准分类是对问题空间信息的提炼,有些分类很容易;有些分类的识别需要一个迭代过程:

    • 先根据经验直觉选主要的划分维度,识别类型

    • 将场景归入对应分类

    • 遇到难以归纳的场景,则评估是否需调整分类

第二招:抽象分析出设计

所谓方案是解决方案空间里的解法,设计过程就是就是从问题空间过渡到解决方案空间。这是过程中的难点,也是最困难的点。设计结果视目标而定(有时是领域模型;有时是流程框架等),使用的方法也需结合问题而定。

第三招:自上而下验场景

设计方案要放在设计场景里进行"推演"。推演的过程很重要:既要推演已知的场景,评估是否满足现有需求;也要对可能性高的未来场景进行推演,评估未来的适应性。

架构实践

领域建模

本文不赘述领域建模的具体方法,只讨论下“子域划分”的问题。虽然有很多文章介绍子域识别的方法,对域划分还是比较难掌握的。如果你见到在某个业务应用里划分5+子域,有些子域里只有少数几个对象或方法,不要觉得奇怪,这些子域很可能是模仿教课书方法的产物;也可能是拍脑袋得到(常见情况),很多域都是"凭感觉"划分的(例如很多应用都有“配置域”)。

看个例子:下图的领域模型能找到清晰的子域边界吗?在模型中找出连线少部分画分界线,两边连线越少说明边界越清晰。下图很难找出清晰且适合边界,但是设计方案里分了4个子域,这样的域划分是值得推敲的。(PS:看图说话是领域划分里一个直观好用的方法)

业务架构设计模式

域的目的

回到域划分的初衷:域划分的目的。域划分和维护是有成本的(成本不低),付出了成本就要考虑收益,域划分的目的(即收益)到底是什么?我认为最重要的有两点: 

  • 控制复杂度:生活中通常将复杂大问题划分为若干个容易解决的小问题。DDD的战略工具“子域”就是控制复杂度的工具:核心域,通用域,支持域就是划整体为部分,降低复杂度的具体方式。

  • 提升复用性:DDD子域类型里"通用域"的概念,清晰表明域的可复用性。

域划分的设计原则,我的观点是:非必要不划分;无收益不划分;不确定不划分。域划分一定要有收益:要么是复杂度降低;要么是复用性提升;要么两者都有。如果没有收益或收益过少,就不要划分子域。在实践中域划分错误的两种"坏味道":

  • 域很浅: 域划分很细,每个域少数几个对象,通常是问题不复杂,不需要划分。

  • 域边界模糊:领域对象关系复杂,子域间没有清晰边界,暗示了模型关系错误或者子域划分错误。

域的识别

虽然有很多的方法帮助识别子域,最主要的还是靠实践摸索,从正反两个方向迭代设计:

  • 正方向:从各种特征/方法出发识别可能的域 (域划分包括:从域定义出发/参考已有标准方案/识别领域概念模糊性/四色建模/事件风暴等);

  • 反方向:通过域设计原则收益验证划分的合理性;

域的验证

域设计原则以星环总结的"自治单元"最为完备,实操性较好。

业务架构设计模式

领域自治与设计原则高内聚低耦合是一致的,核心判断点:

  • 最小完备&自我履行  "依赖" : 域的价值主张决定了域职责,域内包含了完成职责所需要的必要信息以及能独立作出决策,不/少依赖外部域。举例来说:在业务系统设计里经常看到运行域和配置域的设计;运行域执行任何功能都依赖配置域信息。那么从域的完备性和自我履行角度考虑,这种拆分是不合适的。

  • 稳定空间&独立进化  "变化":稳定空间是当前域不受/少受外部域变化的影响;独立进化是指域内变化对外部域没有影响/影响较小。举例来说,子域A直接引用了子域B的领域对象C,对象C变化一定影响到子域A;这种情况说明领域A不够稳定;或者说领域B不能保持独立进化。

流程建模

流程设计问题

以DDD四层模式为例:领域层模型设计逐渐得到了重视;但是应用层设计没有得到足够重视。通常讲应用层职责是面向用例组织业务流程,在实际代码实现中能发现非常多的应用层混乱导致的代码复杂度提升,典型问题包括:阶段粒度不一;节点职责不清;交互混乱。出现这些问题根源是业务逻辑是围绕“数据中心”组织的,没有对流程进行仔细的设计和组织。

业务架构设计模式

流程建模做什么

这里的“流程建模”特指业务逻辑处理的组织方式。流程建模三件事: 定阶段,定职责,定交互

  • 定阶段

这里的“阶段”和"流程节点/处理节点”等概念类似,定阶段就是设计业务场景下程序处理步骤,包含业务和技术考虑。阶段是设计出来的传达出的观点是:根据设计目的(性能/灵活性/结构清晰等),阶段的粒度/顺序是有选择空间。注意:同类型流程的阶段划分粒度保持一致。同类型理解为类似场景,举例来说消息处理场景,那么不同类型消息(创建/完结/撤销等)的处理流程的阶段粒度保持一致。

  • 定职责

定义每个阶段的职责范围。在设计里(无论域识别/应用分层等粗粒度还是类/方法等细粒度设计),职责定义都很重要:明确了职责本质上定义了边界。这样每种功能的实现位置做好了设计,减少了随意性,有利于架构整体的清晰性,不至于腐化成大泥球。

  • 定交互

流程间&流程内的调用关系。请看下图示例的执行过程(这是从真实代码还原出来的):节点A调用了扩展点,扩展点执行完成后调用了节点B. 大家先想一想这样合理吗?

业务架构设计模式

在生活中同层级机构对话、机构内上下交流、机构间同职级交流;很少有低层级员工直接和外部机构的领导对话。这是我们的生活经验,流程交互设计的原则也是类似的,节点负责组织该阶段内的执行逻辑,完成后通知下一个节点。这种节点交互原则总结为:阶段内上下对话,阶段间水平对话。

业务架构设计模式

流程建模怎么做

自下而上流程建模简化为穷举->归纳->推演三步骤,每一步都可以若干次迭代完善。

  • 穷举: 选择熟练的工具梳理流程(流程图,ES等都可以),建议是:按业务场景类型梳理,一次可以梳理一个或几个场景,分多次完成。

  • 归纳:"通看"场景,找共性、找差异、找设计点,采用"合,增,调"(合并同类节点;增加缺失节点;调整节点顺序)三技巧完成流程设计。如何“调顺序"要看设计目的,例如性能优先将部分业务校验节点调整到前面。

  • 推演:用步骤2设计的流程推演业务,主要评估执行顺序和节点职责是满足业务需求。

业务架构设计模式

实例练习

自下而上流程建模

使用自下而上方法为员工入职跟踪流程建模:首先由HR录入待入职员工个人信息和资料,确认无误后为员工分配办公空间;随后系统为员工准备资产和开通账号&权限;员工领取到资产,登录账号后,入职流程就完成了

  • 第一步 自下而上做归纳

由上文的价值流热力图,我们知道公司的入职跟踪流程亟待建设:入职跟踪和员工信息管理能力缺乏;资产管理&设施管理&安全管理有基础能力,但是需要提升。本次使用了事件风暴方法,业务,产品和研发一起梳理入职跟踪过程,目的是建设入职跟踪能力。

业务架构设计模式

  • 第二步 抽象分析出设计

员工入职跟踪接收来自信息管理系统,资产管理系统,安全管理系统的事件,更新入职进展。设计后的流程模型如下图。增加了技术节点: 消息解析,校验,协议适配;为保持流程清晰性,将判断是否"首次流入"的节点提前到了协议适配前执行。

业务架构设计模式

  • 第三步 自上而下验场景

推演是将业务执行过程,用流程表达出来;场景推演技术特别适合复杂业务的验证,能发现设计阶段的遗漏点。下图推演员工已报到事件的处理流程。

业务架构设计模式

总结

本文提供一种业务架构设计模式供大家参考。整个框架希望表达2个重点:1 首先要有业务视角思考,突破仅关注需求实现设计,而是从业务价值出发的业务架构思维;2. 强调设计的逻辑:自上而下或自上而下都是强调设计过程,每个设计决策需要经过推演得出。

以上即是本文提供一种业务架构设计模式:从业务&技术两个角度提炼出一个基础思维框架,供业务线开发同学参考。文章来源地址https://www.toymoban.com/news/detail-494293.html

到了这里,关于业务架构设计模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • BO(Business Object)是一种用于表示业务对象的设计模式

    BO是 Business Object 的缩写,是一种用于表示业务对象的设计模式。在Java中,BO的主要作用是 封装业务逻辑 ,实现业务流程的可重用性和可维护性。 BO主要有以下几个作用: 实现业务逻辑的封装:将业务逻辑封装在BO对象中,可以方便地对业务逻辑进行管理和维护,实现业务流

    2024年02月05日
    浏览(52)
  • 实际开发中常用的设计模式--------单例模式(知识跟业务场景结合)-----小白也能看懂(通俗易懂版本)

    1.定义 单例模式是一种创建型设计模式,它通过使用私有构造函数和静态方法来确保一个类只有一个实例,并且提供全局访问点来获取该实例。 通过使用单例模式,我们可以方便地管理全局唯一的对象实例,并且避免了多次创建相同类型的对象所带来的资源浪费问题 2.业务场

    2024年02月12日
    浏览(42)
  • 小白初探架构模式—常用的设计模式

    目录 1.前言 2. 主从架构         2.1 主从架构的优点        2.2 主从架构的应用场景         2.3 主从架构的实现         2.4 主从架构的示例 3. 主从架构设计的延伸         3.1 主备模式         3.2  主从复制         3.3 集群分片         3.4 异地多活 4. 总

    2024年01月25日
    浏览(36)
  • 系统架构技能之设计模式-组合模式

    一、上篇回顾 我们上篇主要讲述了结构型模式中的外观模式,外观模式作为结构型模式中的一个简单又实用的模式,外观模式通过封装细节来提供大粒度的调用, 直接的好处就是,封装细节,提供了应用写程序的可维护性和易用性。外观模式一般应用在系统架构的服务层中

    2024年02月09日
    浏览(46)
  • 系统架构技能之设计模式-单件模式

    一、开篇 其实我本来不是打算把系统架构中的一些设计模式单独抽出来讲解的,因为很多的好朋友也比较关注这方面的内容,所以我想通过我理解及平时项目中应用到的一 些常见的设计模式,拿出来给大家做个简单讲解,我这里只是抛砖引玉,如果某个地方讲解的不正确或者

    2024年02月10日
    浏览(39)
  • Java架构师设计模式分层架构

    想学习架构师构建流程请跳转:Java架构师系统架构设计 设计模式的分层架构是一种常见的软件设计模式,它将应用程序划分为不同的层次,以便更好地组织和管理代码。每个层次

    2024年02月01日
    浏览(33)
  • Java架构师主流架构设计模式

    想学习架构师构建流程请跳转:Java架构师系统架构设计

    2024年02月07日
    浏览(40)
  • 系统架构技能之设计模式-抽象工厂模式

    一、上篇回顾 上篇我们主要讲述了简单工厂模式和工厂模式。并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下: 简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建。 工厂模式:多个工厂负责多个类型对象的创建,

    2024年02月10日
    浏览(39)
  • Java架构师设计模式事件驱动架构

    想学习架构师构建流程请跳转:Java架构师系统架构设计

    2024年02月01日
    浏览(44)
  • 【系统架构师】-23种设计模式

    设计模式名称 简要说明 速记 Factory Method 工厂方法模式 定义了创建对象的接口,它允许子类决定实例化哪个类 动态生产对象 Abstract Factory 抽象工厂模式 提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类 生产成系列对象 Builder 构建器模式 将

    2024年04月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包