如何在短频快的节奏中做好技术?业务开发必会的架构思维

简介: 本文提供一种业务架构设计模式:从业务&技术两个角度提炼出一个基础思维框架,供业务线开发同学参考。

背景介绍

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

  • 业务视角:业务驱动技术是前台业务的特点,业务开发要逐渐培养自己全局视角看业务的能力:从交付价值角度理解业务模式;从能力规划角度掌握产品方向。本文的第一部分介绍价值引领业务架构的做法
  • 技术视角:应用架构的内容很大,本文第二部分介绍了架构设计的两种方法(风格),以及域划分和流程建模两个架构关注点


image.png

业务架构

业务架构目的

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

业务架构做什么

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

  • 看清楚 "":从宏观角度看“事”是价值源点,是业务战略&目标&价值;从微观来看“事”是业务流程。看清楚"事"就理解了“为什么做”和“怎么做”的2个核心问题。以我们做的业务为例:宏观的"事"就是帮助商家低成本处理风险问题,降低商家经营成本,提高平台竞争力;微观的“事”包括了商家风险预警流程,风险反馈流程等。的阶段尽量脱离具体系统/业务向高度和广度拓展视野。以风险预警为例:从广度上看,风险是如何识别的(有哪些上游),如何透出的(需要什么内容),怎么触达商家;从高度上看,有多少种风险可以预警(共性是什么),商家怎么处理(成本如何等),是否有更优的处理方式。
  • 理清楚 ""谁(利益相关者一起做这件“事”。对利益相关者进行分类管理,识别用户的不同诉求,排序优先级。关键点是用户要什么(用户视角的,而不是外部视角)。
  • 分清楚 ""不同"人“的权&责,在流程中的角色。从产品建设角度出发,人&权&责的识别为了深入了解用户诉求,设计产品能力。例如商家产品需要考虑商家不同角色员工的权&责,以及不同角色需要的产品功能。

业务架构怎么做

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

价值流: 价值流是从利益相关者(客户、最终用户或工作所产生的产品、服务或交付品的接收者)的视角来描述描述一个端到端价值交付的完整过程。业务能力: 业务能力是业务为实现特定目的或结果而可能拥有或交换的特定能力或产能能力/价值流映射: 将业务能力映射到价值流中的每个阶段的过程,用于突出哪些能力对业务运营有着或大或小的重要性

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

image.png

理清楚人&责-角色分析

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

image.png


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

image.png

应用架构

架构:组件的结构、它们之间的相互关系,以及关于组件设计和随时间演变的原则和指南。架构做的事情主要是:识别组件,定义关系,确定原则。组件和设计视角相关,不同视角下组件的形式/粒度:

  • DDD:子域就是组件,域之间的关系,域设计原则
  • 流程视角:流程,子流程,阶段都是组件;定义不同粒度下组件的交互关系和原则
  • 数据视角:数据表是组件,表之间的关系,和设计原则(范式和反范式)
  • 架构分层:层是组件,分层交互的关系和原则
  • ....

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

架构方法

自上而下

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

自下而上

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

自下而上"三板斧"

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

image.png

第一招:自下而上做归纳

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

  • 场景梳理:罗列所有问题细节。例如:流程建模先罗列所有子流程;领域建模先罗列所有域内概念
  • 场景分类:划分类型,合并同类项。找准分类是对问题空间信息的提炼,有些分类很容易;有些分类的识别需要一个迭代过程:
  • 先根据经验直觉选主要的划分维度,识别类型
  • 将场景归入对应分类
  • 遇到难以归纳的场景,则评估是否需调整分类
第二招:抽象分析出设计

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

第三招:自上而下验场景

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

架构实践

领域建模

本文不赘述领域建模的具体方法,只讨论下“子域划分”的问题。虽然有很多文章介绍子域识别的方法,对域划分还是比较难掌握的。如果你见到在某个业务应用里划分5+子域,有些子域里只有少数几个对象或方法,不要觉得奇怪,这些子域很可能是模仿教课书方法的产物;也可能是拍脑袋得到(常见情况),很多域都是"凭感觉"划分的(例如很多应用都有“配置域”)。看个例子:下图的领域模型能找到清晰的子域边界吗?在模型中找出连线少部分画分界线,两边连线越少说明边界越清晰。下图很难找出清晰且适合边界,但是设计方案里分了4个子域,这样的域划分是值得推敲的。(PS:看图说话是领域划分里一个直观好用的方法)


image.png

域的目的

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

  • 控制复杂度:生活中通常将复杂大问题划分为若干个容易解决的小问题。DDD的战略工具“子域”就是控制复杂度的工具:核心域,通用域,支持域就是划整体为部分,降低复杂度的具体方式。
  • 提升复用性:DDD子域类型里"通用域"的概念,清晰表明域的可复用性。

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

  • 域很浅: 域划分很细,每个域少数几个对象,通常是问题不复杂,不需要划分。
  • 域边界模糊:领域对象关系复杂,子域间没有清晰边界,暗示了模型关系错误或者子域划分错误。

域的识别

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

  • 正方向:从各种特征/方法出发识别可能的域 (域划分包括:从域定义出发/参考已有标准方案/识别领域概念模糊性/四色建模/事件风暴等);
  • 反方向:通过域设计原则收益验证划分的合理性;

域的验证

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

image.png

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

  • 最小完备&自我履行 "依赖" : 域的价值主张决定了域职责,域内包含了完成职责所需要的必要信息以及能独立作出决策,不/少依赖外部域。举例来说:在业务系统设计里经常看到运行域和配置域的设计;运行域执行任何功能都依赖配置域信息。那么从域的完备性和自我履行角度考虑,这种拆分是不合适的。
  • 稳定空间&独立进化 "变化":稳定空间是当前域不受/少受外部域变化的影响;独立进化是指域内变化对外部域没有影响/影响较小。举例来说,子域A直接引用了子域B的领域对象C,对象C变化一定影响到子域A;这种情况说明领域A不够稳定;或者说领域B不能保持独立进化。

流程建模

流程设计问题

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

image.png

流程建模做什么

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

  • 定阶段

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

  • 定职责

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

  • 定交互

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

image.png

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

image.png

流程建模怎么做

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

  • 穷举: 选择熟练的工具梳理流程(流程图,ES等都可以),建议是:按业务场景类型梳理,一次可以梳理一个或几个场景,分多次完成。
  • 归纳:"通看"场景,找共性、找差异、找设计点,采用"合,增,调"(合并同类节点;增加缺失节点;调整节点顺序)三技巧完成流程设计。如何“调顺序"要看设计目的,例如性能优先将部分业务校验节点调整到前面。
  • 推演:用步骤2设计的流程推演业务,主要评估执行顺序和节点职责是满足业务需求。

image.png

实例练习

自下而上流程建模

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

第一步 自下而上做归纳

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

image.png

第二步 抽象分析出设计

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

image.png

第三步 自上而下验场景

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

image.png

总结

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


作者 | 李建(甫田)

来源 | 阿里云开发者公众号

相关文章
|
30天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
24天前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
146 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
18天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
57 3
|
16天前
|
前端开发 搜索推荐 安全
陪玩系统架构设计陪玩系统前后端开发,陪玩前端设计是如何让人眼前一亮的?
陪玩系统的架构设计、前后端开发及前端设计是构建吸引用户、功能完善的平台关键。架构需考虑用户需求、技术选型、安全性等,确保稳定性和扩展性。前端可选用React、Vue或Uniapp,后端用Spring Boot或Django,数据库结合MySQL和MongoDB。功能涵盖用户管理、陪玩者管理、订单处理、智能匹配与通讯。安全性方面采用SSL加密和定期漏洞扫描。前端设计注重美观、易用及个性化推荐,提升用户体验和平台粘性。
48 0
|
30天前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
1月前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
1月前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
41 1
|
2月前
|
监控 Serverless 云计算
探索Serverless架构:开发实践与优化策略
本文深入探讨了Serverless架构的核心概念、开发实践及优化策略。Serverless让开发者无需管理服务器即可运行代码,具有成本效益、高可扩展性和提升开发效率等优势。文章还详细介绍了函数设计、安全性、监控及性能和成本优化的最佳实践。
|
1月前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
45 1
|
1月前
|
负载均衡 监控 API
后端开发中的微服务架构实践与挑战
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势和面临的挑战,并通过案例分析提出了相应的解决策略。微服务架构以其高度的可扩展性和灵活性,成为现代软件开发的重要趋势。然而,它同时也带来了服务间通信、数据一致性等问题。通过实际案例的剖析,本文旨在为开发者提供有效的微服务实施指导,以优化系统性能和用户体验。

热门文章

最新文章