架构图
在 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)
目标:通过典型用例说明系统如何工作。
单体架构特点:
- 用户请求在单一应用内完成全流程处理。
绘图示例:
- 选择关键业务场景(如“用户下单”)。
- 用序列图或流程图描述交互步骤:
- 用户请求 → Nginx → 应用服务器。
- 应用服务器调用业务逻辑 → 访问数据库 → 返回结果。
- 标注关键组件(如 Controller、Service、DAO)。
总结建议
- 逻辑视图:强调模块划分和依赖。
- 开发视图:突出代码分层和技术选型。
- 进程视图:简化(单进程)或忽略(如果无并发需求)。
- 物理视图:明确部署环境和外部依赖。
- 场景视图:用典型用例串联其他视图的一致性。
工具推荐:
- Draw.io / Excalidraw(免费在线绘图)。
- PlantUML(代码生成架构图)。
- Lucidchart / Visio(专业工具)。
通过以上方式,即使是一个单体应用,也能清晰表达其架构设计的关键决策和运行逻辑。