业务架构图

简介: 业务架构图是将现实业务抽象化表达的工具,通过分层、分模块、分功能梳理业务关系。它帮助客户理解业务全貌,助力开发者明确系统结构与职责边界,提升协作效率,是连接业务与技术的核心桥梁。

一、背景知识

  1. 什么是业务
    网上对业务的定义有很多,其中个人认为较为准确的几种定义如下:
  2. Business is the organized efforts and activities of individuals to produce and sell goods and services for profit.
    业务是个人或企业为获利而生产、销售商品和提供服务的有组织的努力和活动。
  3. A usually commercial or mercantile activity engaged in as a means of livelihood
    作为谋生手段而从事的通常是商业或商业活动
    以医院为例:医院提供医疗服务,患者通过消费享受医院提供的医疗服务从而重新获得健康的身体。所以,可以把患者去医院看病理解为患者与医院的多阶段交易。而交易的“产品”就是医院提供的医疗服务。
  4. 架构域的分类
    在四种类型的架构(业务架构、技术架构、应用架构、数据架构)中,业务架构是其他架构的基础。首先要熟悉业务,形成业务架构。再根据业务架构,形成技术架构。再根据技术架构确认数据架构和应用架构。

二、引言

  1. 什么是业务架构图
    如果使用一句话去概括的话:业务架构图是一种表达业务层级和关系的工具,通过对整个系统的业务进行拆分,对领域模型进行设计,将现实的业务转化为抽象对象。
  2. 为什么要画业务架构图
    绘制业务架构图的目的有两个方面,第一是面向客户,第二是面向开发者。
    对于客户而言:通过描绘业务的上下级关系,梳理出一整套完整、简单的业务视图,提高客户理解度,最终给客户最直观的业务体现。
    对于开发者而言:通过绘制业务架构图,可以看清楚系统包含哪几个部分,各部分的职责以及相互间的关系。可以让开发者以一个广角去整体了解这个系统,便于快速了解业务。
    三、绘制业务架构图的核心要义
    绘制业务架构图的过程可以理解为对业务的收集、提炼、拆解、归纳和分类的过程。
    简单来说可以分为三个步骤:分层、分模块、分功能。
  3. 业务架构图中的核心元素
    对开发人员来说绘制业务架构图有一点需要特别注意:业务架构图中要淡化技术相关的概念,而要专注于对业务的思考与整理。
    一个好的产品业务架构图需要具备以下三点:
    ● 清晰的模块功能边界
    ● 功能经过抽象,做到标准化、互相独立
    ● 上下游产品功能边界清晰,架构分层明确合理,具备迭代优化的能力
  4. 核心要义之一:分层
    分层,是指将业务按照层级划分,每个层级都属于独立的板块。层级上要有逻辑关联,如下层为上层服务,或下层为上层提供能力支撑等。

如图所示【业务能力层】为【业务应用层】提供业务能力上的服务。上层业务应用可以直接调用能力中心的服务,避免重复开发。

  1. 核心要义之二:分模块
    分模块,是指在同一层级中,分为哪些独立的模块,每个模块可以代表一个完整产品或同类业务的聚合。

如图所示,我们可以将业务应用层分为门诊、住院、急诊、留观和通用医疗服务这五个模块,每个模块都可以在细化其功能矩阵。

  1. 核心要义之三:分功能
    分功能,是指在同一模块中,将独立的功能划分出来,该功能可以代表一个业务入口。

如图在住院中,可以分为入院准备、住院诊疗、住院收费、住院药房等独立的功能模块,各个功能模块由同类功能聚合而来。

  1. 最后再给不同层级和模块之间加上信息流

四、产品业务架构图示例

相关文章
|
1天前
|
uml C语言
系统时序图
时序图是UML中描述对象间消息传递时间顺序的交互图,横轴为对象,纵轴为时间。它用于展示交互流程、强调时序、直观表达并发。主要元素包括角色、对象、生命线、控制焦点、消息(同步、异步、返回)及自关联消息,广泛应用于系统动态建模。
|
1天前
|
监控 算法 Unix
Thread.sleep(0) 到底有什么用(读完就懂)
Thread.Sleep(0)并非无意义,它会触发操作系统立即重新进行CPU竞争,让其他线程获得执行机会,避免界面假死。而Sleep(1000)也不保证精确唤醒时间,因线程需等待调度,并受优先级影响。理解其原理有助于优化多线程程序性能与响应性。
|
1天前
|
缓存 算法 Java
线程池
本文深入剖析Java线程池实现原理,涵盖ThreadPoolExecutor与ScheduledThreadPoolExecutor核心源码,解析线程复用、任务队列、拒绝策略及周期调度机制,并详解ThreadLocal与InheritableThreadLocal原理,助力掌握高效并发编程。
|
1天前
|
敏捷开发 Dubbo Java
需求开发人日评估
本文介绍敏捷开发中关键的工时评估方法——人日估算,涵盖开发、自测、联调、测试及发布各阶段的时间分配,并提供常见需求如增删改查、Excel导入导出、跨服务调用等的参考人日,助力团队科学排期。
|
1天前
|
敏捷开发 Java 测试技术
为什么要单元测试
本文探讨单元测试如何提升软件开发效率。通过剖析测试体系演进、测试金字塔理念,阐明单元测试在提升代码质量、降低维护成本、加速迭代中的关键作用,打破“写单测费时”的认知误区,倡导研发自主保障质量,推动项目高效可持续发展。
|
1天前
|
存储 缓存 算法
零拷贝
实现文件传输时,传统方式需频繁系统调用与内存拷贝,导致大量上下文切换和性能损耗。为提升效率,可采用零拷贝技术,如`sendfile`,在内核态直接将磁盘数据通过PageCache传至Socket,减少上下文切换与内存拷贝。对于大文件或高并发场景,结合异步IO与直接IO,绕过PageCache,避免缓存污染,进一步优化性能。
|
1天前
|
存储 Java 编译器
Java泛型类型擦除以及类型擦除带来的问题
Java泛型在编译时会进行类型擦除,所有泛型信息被移除,仅保留原始类型(如Object或限定类型)。例如,List<String>和List<Integer>在运行时均为List,导致无法通过instanceof判断泛型类型。类型检查在编译期完成,基于引用而非对象本身。擦除后的方法重写可能引发桥方法机制以解决多态冲突,且泛型不支持基本数据类型、静态成员不能使用类级泛型参数。反射可绕过泛型限制,自动类型转换由编译器插入强转实现。
|
1天前
|
运维 Kubernetes 网络安全
Eclipse运行SSM/SSH项目教程
物理部署图描述系统运行时的硬件配置与软件部署结构,展现节点、构件、物件及连接关系,常用于理解分布式系统。通过可视化网络架构与组件部署,帮助开发与运维协作,确保应用与硬件高效整合,是实现系统可维护性与扩展性的重要工具。
|
1天前
|
运维 Kubernetes Java
每天一个小技巧
物理部署图描述系统运行时的硬件配置与软件部署结构,展现节点、构件、物件及连接关系,帮助理解分布式系统的网络架构与运维逻辑,是实现应用与硬件协同运行的重要设计工具。
|
1天前
|
运维 Kubernetes Java
物理部署图
物理部署图描述系统运行时的硬件配置与软件部署结构,展现节点、构件、物件及连接关系,常用于理解分布式系统。通过UML元素如节点(ECS、K8s Node)、构件(Pod)、Artifact(jar包)和网络连接,呈现应用如何在真实环境中部署运行,是开发与运维协同的重要工具。