软件架构——C4模型 ################ * 官网: https://c4model.com/ 核心图表 ======== 系统上下文(System Context) -------------------------- * 语境图 :: 国家级 显示了你正在构建的软件系统 与它的用户以及其他软件之间的关系 组件 关系——带箭头的线 元素——方块和角色 关系描述——线上的文字 元素的描述——方块和角色里的文字 元素的标记——方块和角色的颜色 虚线框 『用例图』 .. figure:: https://img.zhaoweiguo.com/uPic/2022/10/iccrDX.jpg 用途:: 这个图的受众可以是开发团队的内部人员、外部的技术或非技术人员 构建的系统是什么 谁会用它 如何融入已有的 IT 环境 容器图(Container) ----------------- :: 省级 技术决策也是该图的关键部分 系统上下文是由容器组成的 有单独的进程空间就可以看作一个容器 .. figure:: https://img.zhaoweiguo.com/uPic/2022/10/8xlMwB.jpg 容器图是把语境图里待建设的系统做了一个展开。 组件图(Component) ----------------- .. figure:: https://img.zhaoweiguo.com/uPic/2022/10/WUtY0B.jpg 组件图是把某个容器进行展开,描述其内部的模块。 :: 市级 将单个容器放大,以显示其中的组件 组件映射到代码库中的真实抽象 组件在这里面很好的把接口和它的实现类打包成一个概念来表达关系 代码(Code) ---------- :: 道路级 补充图表 ======== 系统景观图: System Landscape:: 比上下文图更丰富的系统级别的表达 上下文图只关注聚焦系统和它的直接关系 本图把间接相关的系统都会标示出来 那些系统的用户以及用户之间的关系也会标示出来 只是内部的用户会用灰色标记 动态图: Dynamic diagram:: 用来表达动态关系的 不同的元素之间是如何调用来完成一个业务 动态图不仅仅适用于一个层面上 它在系统级、容器级和组件级都可以画 表达的目标是不一样的 部署图: Deployment diagram:: 站在部署的角度思考 可以成为Dev和Ops之间沟通的桥梁 部署图基本都是容器级的 总结 ==== 需要可视化的原因是语言不靠谱:: 纸上的不是架构,每个人脑子里的才是 在一个团队里的人,对架构的认识也可能是不一样的 开发是团队协作的事,混乱的理解会造成架构的混乱 C4值得推荐:: C4模型是最容易理解、最容易使用的工具 复用了程序员已有的一些认知模型 参考 ==== * 可视化架构设计——C4介绍: https://www.jianshu.com/p/33c6a7ed126f