Skip to main content

架构图

4+1 架构视图模型 中,即使是单体程序,也可以通过以下方式绘制每个视角的架构图。虽然单体架构相对简单,但通过不同视图可以清晰地描述其设计、模块划分和运行逻辑。


1. 逻辑视图(Logical View)

目标:描述系统的功能模块、组件及其交互关系。
单体架构特点

  • 模块可能集中在同一个代码库中,无明显分布式边界。
  • 组件之间通过函数调用、类继承或接口实现交互。

绘图示例

  • 绘制一个大的矩形表示单体应用边界。
  • 内部划分核心模块(如用户管理、订单处理、数据访问层、业务逻辑层)。
  • 用箭头表示模块间的依赖关系(如业务逻辑层调用数据访问层)。
  • 标注关键接口或抽象类(如 UserService 接口)。


2. 开发视图(Development View)

目标:展示代码组织结构、技术栈和开发规范。
单体架构特点

  • 单一代码仓库(Monorepo)。
  • 分层结构(如 MVC、分层架构)。

绘图示例

  • 分层结构(如展示层、业务逻辑层、数据层)。
  • 标注技术选型(如 Spring Boot、MySQL)。
  • 包/目录结构(如 src/main/java/com/app/controller, src/main/resources)。
  • 依赖管理工具(如 Maven、Gradle)。


3. 进程视图(Process View)

目标:描述运行时进程、线程及通信机制。
单体架构特点

  • 通常单进程运行(如一个 Java JVM 进程)。
  • 内部可能使用多线程处理请求(如 Tomcat 线程池)。

绘图示例

  • 绘制一个进程(如 App.jar),内部标注线程池配置(如最大线程数=100)。
  • 外部交互(如 HTTP 请求到 Tomcat,再到业务逻辑线程)。
  • 可标注同步/异步处理逻辑(如定时任务线程)。


4. 物理视图(Physical View)

目标:展示硬件部署和网络拓扑。
单体架构特点

  • 单台服务器部署(或通过负载均衡扩展多个实例)。
  • 依赖数据库、缓存等外部服务。

绘图示例

  • 一台应用服务器(如 AWS EC2),标注配置(CPU/RAM)。
  • 连接的外部服务(如 MySQL、Redis)。
  • 网络协议(如 HTTP/HTTPS、JDBC)。
  • 可选:反向代理(Nginx)或负载均衡器(如果多实例部署)。


5. 场景视图(Scenarios View)

目标:通过典型用例说明系统如何工作。
单体架构特点

  • 用户请求在单一应用内完成全流程处理。

绘图示例

  • 选择关键业务场景(如“用户下单”)。
  • 用序列图或流程图描述交互步骤:
    1. 用户请求 → Nginx → 应用服务器。
    2. 应用服务器调用业务逻辑 → 访问数据库 → 返回结果。
  • 标注关键组件(如 Controller、Service、DAO)。


总结建议

  1. 逻辑视图:强调模块划分和依赖。
  2. 开发视图:突出代码分层和技术选型。
  3. 进程视图:简化(单进程)或忽略(如果无并发需求)。
  4. 物理视图:明确部署环境和外部依赖。
  5. 场景视图:用典型用例串联其他视图的一致性。

工具推荐

  • Draw.io / Excalidraw(免费在线绘图)。
  • PlantUML(代码生成架构图)。
  • Lucidchart / Visio(专业工具)。

通过以上方式,即使是一个单体应用,也能清晰表达其架构设计的关键决策和运行逻辑。