如何画好一张架构图

Categories: 编程

[toc]

架构

架构是什么?

有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

架构的本质

架构的本质是管理复杂性。

架构的基本出发点是为了效率,通过架构的合理切分,让效率最大化。

  • 架构的本质就是对系统进行有序化重构,不断减少系统的“熵”,使系统不断进化。
  • 架构的本质就是对系统进行有序化重构,以致符合当前业务的发展,并可以快速扩展。

权衡取舍

  • 内外部需求
    • 以改善软件质量为目的的内在结构性变化
    • 以满足客户需求为目的的外在功能性变化
  • 系统实现

架构要表达的是什么?

  • 业务架构
  • 应用/系统架构

建模

建模是什么?

为了理解事物而对事物做出的一种抽象,是对事物的一种无歧义的书面描述。

如何建模

建模图包括:

  • 业务核心流程图
  • 业务功能模块

如何做:

  • 把文档读厚:大量的信息输入,同时探求可能性。常问自己:我是否已经具备了全局视野?
  • 把文档读薄:归类汇总,形成大图。常问自己:边界是什么?输入输出是什么?

具体问题:

  • 系统一定是给人用的,参与者是谁?
  • 业务主要流程是什么?分支流程有哪些?
  • 进一步归纳、演绎,抽象形成业务描述

建模的好处

  • 业务共识:业务、产品、测试、研发大家讲一样的话,描述一样的事情
  • 统一认识,减少沟通成本

系统建模

系统建模更强调职责,依赖,约束关系。

这张图为什么要这么画?层次如何划分?边界如何确定?

终极武器:所有的设计/逻辑模糊的点,将所有已知场景分别套入,自己讲给自己。

怎么画好架构图

套路

  • 高内聚,低耦合。
  • 每次从一个角度来切,然后换多个角度来审视。
  • 通过组合、拆分来精化、优化模型与设计
  • 关键审视点:
    • 耦合性:减少模块间通信量(CTP搜索)
    • 内聚性:功能单一化(租户/分销)
    • 变化的隔离性:减少信息依赖,建隔离层、虚拟层
  • 建模
    • 业务建模,是从小到大,从局部到整体,自底向上的归纳、演绎的抽象过程
    • 系统建模,是从大到小,从整体到局部,自顶向下的拆解、切分的抽象过程

架构图是架构在不同抽象层次的表达,是自然而然的过程。不是有图再有业务流程、系统设计和领域模型等

给谁看:

  • 参与项目的各团队各角色(业务、产品、开发、测试、DevOps)
  • 给项目之外的客户(IOC,北京奥组委,评审专家)
  • 给老板(汇报,跨BU,跨团队协作沟通)

画架构图是为了什么?

  • 解决沟通障碍
  • 达成共识
  • 减少歧义
  • 团队内部和团队之间的协作、沟通、愿景和指导

抽象层次

按抽象层次分类:领域—>子域—>模块—>子模块一>包一>类—>方法

  • 较低层次的抽象:应用内部包图、类图;某个领域:实体图、时序图、状态图、用例图等等;
  • 更高层次的抽象:具有一定的复杂性,比如微服务架构,系统间的交互图,领域/子领域架构图,整个系统架构图

组成元素

架构图的组成元素?

  • 方框、各种形状、虚实线、箭头、颜色(不同颜色代表什么意思)、文字
  • 虚实线表达什么?组件类型,模块类型,层,服务,是否已经实现等?
  • 箭头表达什么?数据流或关联关系?
  • 交互类型可以是同步或异步的;关联类型有可能是指依赖、继承、实现
  • 需要考虑内容术语一致性问题、碎片化问题、信息粒度大小的问题,以及图表的外观问题

如何评价架构图的好坏

  • 内容术语一致、信息粒度大小一致,图例清晰,颜色类型统一,美观
  • 图中的信息与相应的抽象级别相关,且满足利益相关者(合作方)的需求
  • 一张好的架构图不需要多余的文字解释!受众有没有准确接收到想传递的信息
  • 如果它所导致的疑问比它能解释的问题还要多,那么它就不是一张好的架构图
  • 架构图应该帮助每个人看到大局,了解周围的环境,适当的上下文信息
  • 架构图应该避免「只见树木,不见森林」
Read More

Agent 原理

【2025-12-14】