如何编写业务架构

简介: 业务架构

1.背景

大型2B系统复杂度很高,目前业界一般会被拆分成业务需求、技术实现两部分加以讨论。基于对大量失败项目失败原因的分析统计:导致大型2B项目失败的因素,需求分析、逻辑设计相关问题占到80%以上,而由纯技术因素导致失败的情况几乎微乎其微。而需求分析经常遇到的一个问题是,懂业务的人不懂技术,懂技术的人不懂业务,业务逻辑实现与技术实现混杂在一起导致双方的沟通出现大量不确定因素,导致需求未必理解一致;实现规划也未必一致。决策层需要在项目开始前做出决策,需要判断一个系统规划是否具备可行性,其中无技术背景人员可能不清楚实施方案是否可行。通过一些深度分析,我们提出了“业务架构”这个概念来解决这个问题,那么什么是业务架构?一个业务架构应该包括哪些内容?通过怎样的路径去完成一个业务架构呢? 以下是笔者对一段时间的业务架构工作的思考和总结。
本文试图给出:

  • 业务架构的准确定义
  • 业务架构的构成元素
  • 完成业务架构的基本方法

2.业务架构是什么?

2.1 传统解决方案的描述方式

twolawers

  • 缺点:无技术背景的商务分析人员、产品经理缺少对实现的了解

2.2 业务架构描述方式

lawers

2.2.1 特性与优点

它是一种架构层面的”大图“,,便于快速理解一个复杂系统,核心需求如何实现,整个体系如何整合,满足关键需求的关键机制是怎样的?关键系统性的内部能力和支撑机制有哪些?它是对复杂系统的一种高度抽象。通过这样的描述,完成了系统的问题定义和领域划分。
同时业务架构也提供最基本的设计,

  • 脱离技术实现,描述业务实现
  • 只描述重大架构性元素
  • 高抽象度

根据特点,可以看到它的优点是:

  • 无技术背景人员可参与实现的讨论
  • 向技术人员描述解决方案核心要做什么,它必须实现的关键特性是什么
  • 高度抽象使得重复使用成为可能,提高交付质量和效率

对比一下,先前的拆分,无技术背景的人是难以参与到实现讨论中来的,管理层无法确认是否靠谱,而业务架构在关键点上对无技术背景人员实现了可见;抓住重点,对于非重点内容,无需通过这种方式去沟通;高度抽象,一个具备通用性的元素可以在多个地方使用,从而提高了交付速度。

2.2.2 与业务逻辑层设计的区别

一般在解决方案文档或者分析设计文档中,包括了业务逻辑层设计,需要描述一下和业务架构的区别。

2.2.2.1 服务范围

  • 业务逻辑层设计罗列所有功能性需求,包括所有业务逻辑;一般不包括非功能性需求(非功能性需求在解决方案文档中一般独立成章)
  • 业务架构只描述架构层重大功能性需求,也反应非功能性需求。
    也就是说业务逻辑层设计包括的内容远高于业务架构。

2.2.2.2 表达内容

  • 业务逻辑层设计是一种罗列,表示出逻辑内容即可
  • 业务架构是一种抽象,要揭露问题的本质
    简单来说(这不正确,后续会给出完整说明)业务架构包括的是某个模型的描述,模型具有较高抽象性,可能有多种技术实现。因为不涉及技术实现,所以可以和无技术背景的人讨论。

2.2.3 与需求说明书的区别

需求说明书和业务架构有不同的编写目的,所以差别比较大。

\ 需求说明书 业务架构
内容 功能性需求 功能性需求
非功能性需求
逻辑实现
形式 详细描述 抽象、汇总
范围 全部(需求) 重点(内容)
目的 指导开发、检查验收等 描述重大架构元素,指导决策

总体来说,需求说明书,重在写“需求”;业务架构,重在写“实现“。在描述功能性需求的部分有一部分重叠的地方,但是对功能性需求的描述的目的和手段完全不一样,功能性需求是需求说明书的主体和关键;而在业务架构中,只是整理典型功能性需求,存在是为了引出架构元素的设计和后续实现草案。

2.3 业务架构的定义

提供一种概念性的视角去观察系统架构,用粗线条描述一种概念级别的重大设计。用来描述系统中最基本最重大的设计,帮助阅读者快速理理解一个复杂系统。一般来说业务架构实现为一系列业务架构图和描述说明文字。

  • 关键元素的定义角色,起一个能表达特征的名字
  • 关键元素的功能职责
  • 关键元素与其它元素有哪些协作关系,一般包括关联关系或者交互关系
  • 使用场景
  • 与基本机制的集成

业务架构表述了一个系统的关键架构元素和他们之间的关系,即描绘了该系统的轮廓,描述关键架构,表达了元素之间的关系,由此,读者可以基本了解一个复杂系统的构成与原理。

2.3.2 业务架构的边界

  • 业务架构只描述重大需求和实现
  • 业务架构不描述技术实现

2.4 包括的内容

业务架构包括业务架构图和架构元素描述两部分内容。

2.4.1 业务架构图

diagram

2.4.2 架构元素描述

用于对业务架构图中包括的元素进行描述,一般采用固定格式
一般采用CRC-R (Component-Responsibility-Collaborator-Rationale)格式描述关键架构元素,CRC-R采用以下固定格式:

内容
元素名称(Comonent)
功能职责(Responsibility)
协作关系(Colaborators)
解释说明(Rationale)

2.4.2.1 元素名称

元素的名称,要求明确清晰易理解。

2.4.2.2 功能职责

描述该元素的角色、承担的职责,要实现的特征。

2.4.2.3 协作关系

描述该元素和其它哪些元素有关系,每个关系用一句话描述。关系包括但不限于:组合、聚合、依赖、相关等。

2.4.2.4 解释说明

分析为什么抽象出这个元素、该元素的定位、以及关键功能的说明等,让阅读者清楚写作者的意图。

2.4.3 架构机制

对一些通用机制,比如安全、性能等进行支撑的机制进行描述。架构机制和重大架构元素的区别在于,架构机制适用范围更广,几乎涉及整个系统,或者主要机制。
架构元素的设计本质做出一些草稿性构思,要求能形成映像、能传基本达观念。一般来说要包括:

  • 实现的思路
  • 预设条件
  • 结构描述(类似最基本的数据结构,但是要说清楚,不用技术术语)
  • 注意事项

这部分内容要求不涉及技术,无技术背景者能看懂。

3.如何写业务架构

flow

其中橙色表示业务架构文档需要包括的内容。

3.1 整理 重大需求(significant requirements)

首先不能凭空写业务架构,是从需求中来。

3.1.1 需求采集

  • 重大功能性需求
  • 非功能性需求

重大需求只关注核心且属于架构层面的需求。如果有需求文档、PRD文档,那么很大程度可以从中提炼;如果还没有,可以自己找客户或者真实需求方调查。一般来说,需要业务架构师加入需求分析团队深入了解需求。

3.1.2 用例

整理用例图或者用例,这部内容无需包括到业务架构中,便于理解。

3.2 模型图 (diagram)

整理一张图,包括所有业务模型。

3.2 业务模型(model)

model

3.2.1 职责(responsibility)

描述该业务组件负责完成的功能。

3.2.2 关系(relationship)

描述该业务组件和其它业务组件之间的关系。

3.2.3 分析解读(rationale)

分析该业务组件设计的原因

3.2.4 设计草案(可选)

在CRC-R之后,提供一些方法对内容进行描述

3.3 整理 架构机制(architectural mechanism)

除模型以外,还有一些基础机制,都需要使用,也需要描述到文档中。

  • 模型是某一种或者2、3种业务涉及的通用结构,具备区域性
  • 如果该模型从横切的角度看,具备全局性,那它就成了一个架构机制

5.验证

完成的业务架构需要进行讨论、验证。架构是平衡的艺术。

相关文章
|
敏捷开发 架构师 项目管理
架构师才能看懂的大型网站架构面临的挑战:业务架构的基本思路
业务架构的基本思路 大型网站系统有很多功能,一次性明确所有的功能需求并设计出一个庞大的业务架构是一件费力不讨好的事情。因为在项目前期,难免会忽视一些琐碎功能,而随着开发的进行,也会有很多新的想法产生,基本上不会存在完全按照最初的业务架构设计完成的软件产品。因此,业务架构不仅要做到“规整功能模块,厘清产品业务逻辑”,更重要的是如何做到“有规划性地应对项目过程中的需求变更”。
|
运维 架构师 前端开发
架构地图-业务架构1
架构地图-业务架构1
|
存储 缓存 架构师
程序员架构修炼:架构设计概要,业务、应用、技术、数据架构
程序员架构修炼:架构设计概要,业务、应用、技术、数据架构
578 0
程序员架构修炼:架构设计概要,业务、应用、技术、数据架构
|
人工智能 运维 Kubernetes
我把传统业务架构升级到业务中台架构的心得
此为实战经验输出章节,重点在于自我的经验总结和实践经验记录,自己在整个过程角色是架构师和研发部门负责人角色,即设计和执行合一
|
SpringCloudAlibaba 中间件 数据库
关于微服务架构业务思考
关于微服务架构业务思考
1260 0
|
NoSQL Redis 数据中心
架构优化与业务迭代,你会怎么选?
对于每个软件系统,我们都可以通过业务和架构两个维度来体现它的价值。 尤其是软件开发人员,应该确保自己的系统在这两个维度上的实际价值都能长时间维持在很高的状态。
架构优化与业务迭代,你会怎么选?
|
消息中间件 存储 缓存
读书笔记 之《软件架构设计: 大型网站技术架构与业务架构融合之道》
帅哥美女,知道你们时间宝贵,那么就由小菜为你读好一本书,读一本好书,取其精华,与你共享~!今天带来的是 《软件架构设计:大型网站技术架构与业务架构融合之道》 的读书笔记
486 0
读书笔记 之《软件架构设计: 大型网站技术架构与业务架构融合之道》
|
存储 固态存储 关系型数据库
架构思考-业务快速增长时的容量问题
之前做过一个项目,数据库存储采用的是mysql。当时面临着业务指数级的增长,存储容量不足。
架构思考-业务快速增长时的容量问题
|
存储 消息中间件 SQL
架构师之路--视频业务介绍,离线服务架构和各种集群原理
  先聊聊业务。我们媒资这边目前的核心数据是乐视视频的乐视meta和专门存储电视剧,综艺节目,体育赛事这种长视频的作品库。乐视视频的数据都是多方审核的,需要很多运营。但是作品库部分却是弱运营的,运营都不超过10个人。结果做了两个app,日活都有四五百万的样子。我们其实都有各样的技术储备,很容易可以抓取人家数据,自己套上一个壳子在线解码。但是我们逼格很高,都不这么做的。乐视是个非常注重版权的公司。我名下都有近百个专利了。   撇开这个项目,先看这边一般web项目的常用JVM配置。
架构师之路--视频业务介绍,离线服务架构和各种集群原理