软件架构C4模型介绍 “C4 模型”:html
表明上下文(Context)、容器(Container)、组件(Component)和代码(Code)——一系列分层的图表,能够用这些图表来描述不一样缩放级别的软件架构,每种图表都适用于不一样的受众。数据库
为代码建立地图,首先须要一组通用的抽象来建立一种无处不在的语言,用来描述软件系统的静态结构。C4 模型使用容器(应用程序、数据存储、微服务等)、组件和代码来描述一个软件系统的静态结构。它还考虑到使用软件系统的人。服务器
第1 层是系统上下文图,它显示了正在构建的软件系统,以及系统与用户及其余软件系统之间的关系。微信
第2层是一个容器图,将软件系统放大,显示组成该软件系统的容器(应用程序、数据存储、微服务等)。技术决策也是该图的关键部分。如下是互联网银行系统的容器图示例。它显示了互联网银行系统(虚线框)由五个容器组成:服务器端Web 应用程序、客户端单页面应用程序、移动应用程序、服务器端API 应用程序和数据库。网络
第 3 层是组件图,将单个容器放大,以显示其中的组件。这些组件映射到代码库中的真实抽象(例如一组代码)。下面是一个虚拟的网上银行系统的组件图示例,显示了 API 应用程序中的一些组件(而不是所有)。架构
两个Spring MVC REST 控制器为JSON/HTTPS API 提供访问点运维
第4 层代码
最后,能够放大个别组件,以显示该组件的实现方式。如下是一个虚拟的网上银行系统的UML 类图示例微服务
C4 模型没有预约义任何特定的符号,在这些示例图中看到的是一个个简单的符号,适用于白板、纸张、便签、索引卡片和各类图表工具。也可使用 UML 做为符号,并适当使用包、组件和原型。工具
C4 模型是一种在不一样抽象层次上交流软件架构的简单方法,能够向不一样的受众讲述不一样的故事。这也是向软件开发团队介绍(一般是从新引入)严谨和轻量级建模的一种方式。性能
在JAVA中,有一个工具帮助咱们用代码驱动测试架构ArchUnit in Java。
相关也有一本书推荐Coding an Architecture Style.
若有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注个人微信订阅号:
做者:Petter Liu
出处:http://www.cnblogs.com/wintersun/ 本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。 该文章也同时发布在个人独立博客中-Petter Liu Blog。