前言

在做系统架构设计过程中,有很多工具,今天给大家推荐一款比较简洁具备层次化的设计模型,C4模型;希望能为大家系统设计起到一定的帮助

什么是C4模型

C4 模型是来自 software architecture for developers 一书的定义,指的是 Context 上下文场景、Container 容器、Component 组件和 Classes 类(或者 Code 代码),意思指一个软件架构是由这些模型呈树形结构组成。
 确实代码并不能讲述系统的整个故事,在缺乏文档的情况下,人们通常会开始在白板上或纸上用图框和线条解释系统的主要构建块是什么,它们是如何连接的。而使用Microsoft Visio, Rational Software Architect 或 Sparx Enterprise Architect等专业工具又比较复杂。

更好的办法是在不同的抽象层次创建不同的图diagram,一个简单的图diagram比复杂的图能够更有效表达描述。
在 www.4model.com 提供了更多的信息、视频、示例图表和工具链接。如果你的团队正纠结于软件架构沟通方面的问题,那么可以看看这些资料。

4层的划分

C4架构图主要街道一下几个问题:1. 为哪些用户提供什么服务?2. 完成这个系统使用了哪些服务? 3. 每个服务是由哪些组件实现的?4. 实现这个组件需要完成什么?;以上4个问题分别由语境图容器图组件图类图组成。

上下文图Context diagram

一个系统是一个高层次抽象和代表,一个系统由多个单独的容器组成,比如财务系统,银行系统或网站系统等。
主要意义在于明确我们构建的软件系统是什么,谁在使用它,如何与现有的IT系统融合
它主要从更高的层次展示了正在向自己已有的IT环境中添加了什么,技术和非技术可以当做讨论起点的一种更高层次图标,如下图例

容器图Container diagram

一个容器代表组件执行或驻留的地方,这可能是一个Web容器或应用服务器,也可以是富客户端应用或数据库,容器是做为系统一部分启动的,容器之间通讯是通过远程接口如 SOAP web service, RESTful interface, Java RMI, Microsoft WCF, messaging,等进行, Docker可以认为是一个这样的容器。

主要帮助解决软件系统的整体形态,高层次的技术决策、职责在系统如何分布、容器之间如何相互交流,为实现特性,作为一个开发者应该在哪里写代码。
容器的概念包含但不限于Web服务器、应用服务器、总线、web浏览器等。图例如下:

组件图Component diagram

一个组件可以认为是由一个或多个类组成的逻辑组,比如一个审计audit组件或授权服务能够用于决定资源的访问是否被允许,组件典型地由许多协同类组成微服务架构可以认为是一种组件。
主要用以解答系统由哪些组件组成,高层次上,系统如何工作,是否清晰,所有组件/服务是否在一个容器中;如下图所示

类图 Class

这是面向对象世界常用, 类是我们系统最小的构建模块.如下示例

C4模型工具箱

为了能够比较好的绘制图例,我这边整理了其图元素工具箱,喜欢的朋友可以直接拷贝使用(访问地址:https://www.processon.com/view/link/5cbed72ae4b01941c8b88864)


如果你在这方面有不同方面的见解,也欢迎在下方进行留言,一起讨论

想要了解更多信息,可关注本公众号(一起学开源);或请长按以下二维码添加助手。将拉你加入社区进行交流

​​

软件架构设计|C4模型相关推荐

  1. 【架构】软件架构设计分层模型和构图思考

    一.架构思维概述 对于架构思维本身仍然是类似系统思维,结构化思维,编程思维等诸多思维模式的一个合集.由于架构的核心作用是在业务现实世界和抽象的IT实现之间建立起一道桥梁,因此架构思维最核心的就是要理解 ...

  2. bs cs架构区别_软件架构设计分层模型和构图思考

    今天谈下架构设计中的分层思维和分层模型以及基于分层思维下的架构构图逻辑. 架构思维概述 对于架构思维本身仍然是类似系统思维,结构化思维,编程思维等诸多思维模式的一个合集.由于架构的核心作用是在业务现实 ...

  3. 软件架构设计分层模型和构图思考

    点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 今天谈下架构设计中的分层思维和分层模型以及基于分层思维下 ...

  4. 软件架构设计分层模型和构图思考(有史以来最全架构图)

    架构思维概述 对于架构思维本身仍然是类似系统思维,结构化思维,编程思维等诸多思维模式的一个合集.由于架构的核心作用是在业务现实世界和抽象的IT实现之间建立起一道桥梁,因此架构思维最核心的就是要理解到业 ...

  5. 京东云开发者|软件架构可视化及C4模型:架构设计不仅仅是UML

    软件系统架构设计的目标不在于设计本身,而在于架构设计意图的传达.图形化有助于在团队间进行高效的信息同步,但不同的图形化方式需要语义一致性和效率间实现平衡.C4模型通过不同的抽象层级来表达系统的静态结构 ...

  6. C4 模型 - 可视化架构设计

    前言 世界上最难的两件事是: 1. 把我的思想放进你的脑袋 2. 把你的钱放进我的口袋 第二点我们不探讨,因为这是众所周知的,不信?过来试试:) 对于第一点,对我们程序员来说,其实也是我个人一直强调的 ...

  7. 软件架构设计 温昱著 - 读书笔记

    #读后感#一本实用性很强的架构入门书籍.内容有深有浅,涉及面广,帮我们树立一个架构设计的全局观.  本书已读完,把读后感放在最前面,以下是详细的读书笔记. #读书笔记# 我们将软件架构概念分为两大流派 ...

  8. 软件工程系列教材:软件架构设计实践教程

    第1章 认识软件架构 1.1 软件架构与软件工程 1.1.1 软件产业的工业化与现代化 1.1.2 软件系统的复杂性 1.1.3 克服"软件危机"的进程 1.1.4 现代软件产业发 ...

  9. 《软件架构设计》读书笔记

    前言 春节前后花了将近两个月时间才把<软件架构设计>一书看完.此书紧紧围绕"软件架构设计"这一主题,非常系统地解析了软件架构的概念,阐述了切实可行的软件架构设计方法,给 ...

最新文章

  1. R语言诊断试验数据处理与ROC分析实战案例2
  2. redis系列(一)-----日常使用详解
  3. TOJ 1702.A Knight's Journey
  4. 【转】Go 语言教程(2)——表达式
  5. Java序列化注意事项
  6. 牛客网 【每日一题】5月20日题目 简单瞎搞题
  7. 计算机浏览器应用程序,基于浏览器的应用程序
  8. 不懂函数能学c语言吗,不会函数能学C语言吗
  9. Collections about Deep Learning
  10. 告别 996,解放开发者,一站式 AI 开发平台助力 AI-Native 时代
  11. html云文件系统,一种HTML5云文件系统
  12. 尚硅谷设计模式-观察者模式
  13. java 生成xml数据
  14. Ubuntu卸载Anaconda步骤
  15. 解决执行HiveSQL时,报could not be cleaned up的错误
  16. 【重要】有三AI知识星球不再对外公开!还想加入的有哪些途径?
  17. spoolsv.exe重启脚本-(spoolsv错误处理)
  18. 通过jsp向mysql批量导入数据_通过JSP+JavaBean对mysql进行添加数据的操作
  19. 菜鸟编程C语言例题100,C语言编程 菜鸟练习100题(11-20)
  20. 嵌入式学习——周总结

热门文章

  1. python中numpy数组形状和计算
  2. ios 升级后 不能在xcode 真机运行的报错处理
  3. Python练习题答案: CIS 122#12中的构造【难度:1级】--景越Python编程实例训练营,1000道上机题等你来挑战
  4. spring mvc 学习指南一
  5. 用户名片 2:Nginx 与图片深度解析
  6. 中文***测试专用Linux系统—MagicBox(魔方系统)
  7. matlab习题及答案,MATLAB习题及答案
  8. 《当阿呆遇上阿瓜》:当铁锹遇上石头
  9. USB OTG连接方式
  10. 王卫不再担任顺丰速运法人 变更为陈雪颖