学习C4模型的新网站

news2024/9/22 13:39:15

新的 C4 模型网站:C4 模型是一种易于学习、开发人员友好的软件架构图绘制方法。良好的软件架构图有助于软件开发/产品团队内部和外部的沟通、新员工的高效入职、架构审查/评估、风险识别、威胁建模等。

C4模型是:

  1. 一组分层抽象(软件系统、容器、组件和代码)。

  2. 一组层次结构图(系统环境、容器、组件和代码)。

  3. 符号独立。

  4. 独立于工具。

用途和好处
C4 模型是一种易于学习、开发人员友好的软件架构图绘制方法。良好的软件架构图有助于软件开发/产品团队内部和外部的沟通、新员工的高效入职、架构审查/评估、风险识别(例如风险风暴)、威胁建模等。

C4 模型背后的背景是什么?
C4 模型是由Simon Brown创建的,他在担任软件开发人员/架构师的同时,也开始教授软件架构。Simon 的培训课程的一部分是设计练习,其中会向一组人提供一些要求,要求他们进行一些设计,并绘制一些图表来表达该设计。

虽然这是一项以设计为重点的练习,但各种各样的图表表明,将想法可视化是大多数人非常缺乏的一项技能。C4 模型本质上是 Simon 过去可视化软件架构的方式的形式化,多年来不断发展。

虽然确切的日期很难确定,但 C4 模型的根源可以追溯到 2006-2009 年左右,图表类型(“上下文”、“容器”、“组件”、“类”)于 2010 年初命名,而“C4”名称于 2011 年初首次使用。第四种图表类型在 2015-2016 年间从“类”重命名为“代码”。

C4 模型背后的灵感是什么?
C4 模型是在敏捷运动影响下的团队不太热衷于使用统一建模语言(UML) 来记录软件架构(如果他们要创建图表的话)的时代创建的。尽管如此,C4 模型还是受到了 UML 和软件架构 4+1 模型的启发。总之,您可以将 C4 模型视为底层概念的简化版本,旨在 (1) 使软件开发人员更容易描述和理解软件系统的工作原理,以及 (2) 尽量缩小软件架构模型/描述与源代码之间的差距。

C4 模型不是倒退了吗?为什么要重新发明 UML?为什么不直接使用 UML?
您是否认为 C4 模型是进步还是退步取决于您所处的位置。如果您正在使用 UML(或 SysML、ArchiMate 等)并且它对您有用,请坚持使用它。不幸的是,UML 的使用似乎正在减少,许多团队又开始使用临时框和线图。鉴于其中许多团队不想使用 UML(出于各种原因),C4 模型有助于在软件架构的沟通方式中引入一些结构和规则。对于许多团队来说,C4 模型就足够了。而对于其他团队来说,也许它是 UML 的垫脚石。

为什么 C4 模型不涵盖业务流程、工作流、状态机、领域模型、数据模型等?
C4 模型的重点是构成软件系统的静态结构,具有不同的抽象级别。如果您需要描述其他方面,请随意使用 UML 图、BPML 图、ArchiMate 图、实体关系图等来补充 C4 图。

C4 模型是否暗示设计流程或团队结构?
一个常见的误解是,团队的设计过程应该遵循 C4 模型层次结构中的级别,也许团队中的不同人员负责不同级别的图表。例如,业务分析师创建系统环境图,架构师创建容器图,而开发人员负责其余的细节级别。

虽然您当然可以以这种方式使用 C4 模型,但这不是预期或推荐的使用模式。C4 模型只是从不同抽象层次描述软件系统的一种方式,它并不涉及软件交付过程。

使用 C4 描述库、框架和 SDK?
C4 模型实际上是为在各种抽象级别上对软件系统进行建模而设计的。要记录库、框架或 SDK,最好使用 UML 之类的东西。或者,您可以使用 C4 模型来描述框架、库或 SDK 的使用示例;也许可以使用颜色编码来表示软件系统的哪些部分是定制的,哪些部分是为您提供的。

C4模型是否具有普遍适用性?
C4 模型旨在帮助描述、记录和绘制定制的定制软件系统。从这个角度来看,C4 模型可用于描述各种软件架构(单片或分布式)、以各种编程语言构建、部署在各种平台上(本地或云)。

可能不太适合 C4 模型的解决方案包括嵌入式系统/固件,以及依赖于大量定制而非定制开发的解决方案(例如 SAP 和 Salesforce)。即使有了这些解决方案,您仍然会发现系统上下文和容器图很有用。

C4 模型可以扩展吗?
示例图恰好由少量的框和箭头组成,但您可能会问 C4 模型如何与现实世界的软件系统一起使用,其中有 600 个组件而不是 6 个。答案是您选择的工具可以帮助您,也可以阻碍您。

即使软件系统相对较小,人们也会忍不住想在一张图表上包含整个故事。例如,如果您有一个 Web 应用程序,创建一个组件图来显示组成该 Web 应用程序的所有组件似乎是合乎逻辑的。除非您的软件系统真的那么小,否则您可能会在图表画布上用尽空间,或者很难找到没有被无数重叠线条弄乱的布局。使用更大的图表画布有时会有所帮助,但大型图表通常难以解释和理解,因为认知负荷太高。如果没有人理解图表,就没有人会看它。

相反,不要害怕将单个复杂图表拆分成大量简单图表,每个图表都特别关注业务领域、功能领域、功能分组、有界上下文、用例、用户交互、功能集等。关键是要确保每个单独的图表在同一抽象级别上讲述同一整体故事的不同部分。

谁在使用 C4?
Simon 亲自向 30 多个国家的 10,000 多人传授了 C4 模型;会议演讲、视频、书籍和文章的受众远不止这些。其他人也在教授、演讲和撰写有关 C4 模型的文章,而且该模型已被整合到许多工具中。以下是一些案例研究:

  • Spotify:Spotify 工程:软件可视化 - 挑战,已接受
  • Boots:工程领袖:与 Amar Mehan 一起探讨 C4 设计
  • 迪卡侬:大规模软件架构导航:迪卡侬架构流程的见解
  • 合作:LinkedIn 帖子

https://www.jdon.com/75543.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2155179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NLP 主流应用方向

主流应用 文本分类文本匹配序列标注生成式任务 应用细分 文本纠错话者分离 本质为文本分类任务数字归一化 实现数字映射,提高内容可读性 如将一九九九转1999

AI基础 L26 Introduction to Automated Planning - II

ADL Action Description Language (ADL) is a richer language than STRIPS. It allows for • Positive and negative literals in states • The open world assumption • Quantified variables in goals as well as conjunctions and disjunctions • Conditional effects …

Web_php_include 攻防世界

<?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) { 以是否检测到php://为判断执行循环$pagestr_replace("php://", "", $page);//传入空值&#xff0c;替换 } include($page); ?&g…

226. 翻转二叉树之多种解法(递归法、深度优先(迭代法)、广度优先【层序遍历】)

文章目录 226. 翻转二叉树题外话思路递归法迭代法:深度优先遍历层序遍历&#xff1a;广度优先遍历拓展总结 226. 翻转二叉树 226. 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;r…

【JAVA开源】基于Vue和SpringBoot的在线文档管理系统

本文项目编号 T 038 &#xff0c;文末自助获取源码 \color{red}{T038&#xff0c;文末自助获取源码} T038&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

单片机原理及应用详解

目录 1. 什么是单片机&#xff1f; 2. 单片机的基本组成 3. 单片机的工作原理 4. 常见的单片机分类 5. 单片机的应用领域 6. 单片机开发流程 7. 单片机开发中的常见问题及解决方案 8. 单片机的未来发展趋势 9. 总结 1. 什么是单片机&#xff1f; 单片机&#xff08;Mi…

美食共享圈:Spring Boot校园周边美食平台

第二章 系统分析 2.1 可行性分析 可行性分析的目的是确定一个系统是否有必要开发、确定系统是否能以最小的代价实现。其工作主要有三个方面&#xff0c;分别是技术、经济和社会三方面的可行性。我会从这三个方面对网上校园周边美食探索及分享平台进行详细的分析。 2.1.1技术可行…

springboot实战学习笔记(5)(用户登录接口的主逻辑)

接着上篇博客学习。上篇博客是已经基本完成用户模块的注册接口的开发以及注册时的参数合法性校验。具体往回看了解的链接如下。 springboot实训学习笔记&#xff08;4&#xff09;(Spring Validation参数校验框架、全局异常处理器)-CSDN博客文章浏览阅读576次&#xff0c;点赞7…

[云服务器13] 如何正确选择云服务器?

【非广告&#xff0c;仅提供建议&#xff0c;没有强制消费引导】 这期我们不讲搭建教程了&#xff0c;因为我想到前面12篇的教程&#xff0c;有关套餐配置的教程好像都有点敷衍…… 所以这期我们主要来说一说服务器的配置选择和不同配置的应用场景。 网站: 雨云 打开后&…

Cisco 基础网络汇总

⭕个人主页 可惜已不在 ⭕可以分享给身边有需要的人 ⭕有用的话就留下一个三连吧 目录 前言: 一.网络及网络设备认识 二. 二层网络 三. 生成树、端口 四. 三层网络 五.访问控制 六.NAT 七.DHCP 八.PPP 九.帧中继 十.热备份 十一.综合实验 十二.WLAN 十三.Cisco P…

Compiler Explorer 开源项目-在线编译器网站

Compiler Explorer 开源项目&#xff0c;一个交互式编译器探索网站。在 C、C、C♯、F♯、Rust、Go、D、Haskell、Swift、Pascal、ispc、Python、Java 或其他 30 多种支持的语言组件中编辑代码&#xff0c;并实时查看不同编译器&#xff08;包括不同cpu架构&#xff09;编译后的…

STM32—MPU6050

1.MPU6050简介 MPU6050是一个6轴姿态传感器可以测量芯片自身X、Y、Z轴的加速度、角速度参数&#xff0c;通过数据融合&#xff0c;可进一步得到姿态角&#xff0c;常应用于平衡车、飞行器等需要检测自身姿态的场景3轴加速度计(Accelerometer&#xff1a;测量X、Y、Z轴的加速度3…

构建未来企业的理论基石:业务能力建模指南的深度解析与战略实施框架

数字化转型已经成为全球企业的战略焦点&#xff0c;在这个过程中&#xff0c;如何有效地将复杂的业务需求、技术架构和市场变化结合&#xff0c;形成具备长期竞争力的企业能力框架&#xff0c;是企业成败的关键。《业务能力指南》提供了一套经过验证的理论体系&#xff0c;帮助…

数字图像面积计算一般方法及MATLAB实现

一、引言 在数字图像处理中&#xff0c;经常需要获取感兴趣区域的面积属性&#xff0c;下面给出图像处理的一般步骤。 1.读入的彩色图像 2.将彩色图像转化为灰度图像 3.灰度图像转化为二值图像 4.区域标记 5.对每个区域的面积进行计算和显示 二、程序代码 %面积计算 cle…

《COMMA: Co-articulated Multi-Modal Learning》中文校对版

系列论文研读目录 文章目录 系列论文研读目录摘要导言相关工作视觉语言模型提示学习视觉语言模型中的提示学习 方法准备工作提议方法 实验基准设定基础到新的概括跨数据集传输消融实验 结论 摘要 经过预训练的大规模视觉语言模型&#xff08;如CLIP&#xff09;已经在一系列下…

PyQt5 导入ui文件报错 AttributeError: type object ‘Qt‘ has no attribute

问题描述&#xff1a; 利用 PyQt5 编写可视化界面是较为普遍的做法&#xff0c;但是使用全新UI版本的 Pycharm 修改之前正常的UI文件时&#xff0c;在没有动其他代码的情况下发现出现以下报错 AttributeError: type object Qt has no attribute Qt::ContextMenuPolicy::Defaul…

BFS 解决多源最短路问题

文章目录 多源BFS542. 01 矩阵题目解析算法原理代码实现 1020. 飞地的数量题目解析算法原理 1765. 地图中的最高点题目解析算法原理代码实现 1162. 地图分析题目解析算法原理代码实现 多源BFS 单源最短路&#xff1a; 一个起点、一个终点 多源最短路&#xff1a; 可以多个起点…

Apache ZooKeeper 及 Curator 使用总结

1. 下载 官网地址&#xff1a;Apache ZooKeeper 点击下载按钮 选择对应的版本进行下载 2. 使用 1、解压 tar -zxf apache-zookeeper-3.9.2-bin.tar.gz2、复制配置文件&#xff0c;有一个示例配置文件 conf/zoo_sample.cfg&#xff0c;此文件不能生效&#xff0c;需要名称为…

LeetCode_sql_day31(1384.按年度列出销售总额)

目录 描述 1384.按年度列出销售总额 数据准备 分析 法一 法二 代码 总结 描述 1384.按年度列出销售总额 Product 表&#xff1a; ------------------------ | Column Name | Type | ------------------------ | product_id | int | | product_name | var…

将sqlite3移植到arm开发板上:

一、下载源代码 sqlite3网址&#xff1a;https://www.sqlite.org/download.html 下载&#xff1a;sqlite-autoconf-3460100.tar.gz 二、解压 在Linux家目录下创建一个sqlite3文件夹&#xff0c;将压缩包复制到该文件夹下&#xff0c;再在该目录下打开一个终端&#xff0c;执行…