C4模型的实践

VB_*_*VB_ 5 diagram uml modeling c4-model

在阅读了C4 模型并听了Simon Brown 的演讲后,我仍然不明白如何在实践中使用它。

AFAIK,C4 模型的主要贡献是简单抽象的“协议”,使图表和文档更接近开发人员。在同一个 C4 中,更多的是关于建议,你必须自己弄清楚一些东西(这再次打破了与自定义抽象的“协议”)。

如果C4缺少详细信息我该怎么办?我应该定制到什么程度?

例如:

  1. 基础设施、数据流或业务流程等支持图表如何融入 C4?
    例如,路由器/防火墙/api-网关/服务总线是基础设施图上的 C4 容器吗?我找不到任何例子。
  2. 扩展C4的等级是个好主意吗?
    C4 模型只有 4 级(不是递归的)。如果我需要第五个子系统级别怎么办?
  3. 容器图(第 2 级)的“数据库容器”是否应该包含有关数据库名称、模式名称或数据库技术的信息?
    从示例来看,不包含, ro包含
  4. 除了官方文档中的琐碎内容之外,是否可以找到 C4 示例?

小智 4

  1. 基础设施、数据流或业务流程等支持图表如何融入 C4?例如,路由器/防火墙/api-网关/服务总线是基础设施图上的 C4 容器吗?我找不到任何例子。

构成 C4 模型的核心图旨在关注不同细节级别的静态结构。c4model.com 上还定义了一些补充图,其中之一是部署图……这是我对路由器、防火墙、负载均衡器等进行建模的地方。

还有其他几种图表符号可用于数据流(DFD、UML 序列图、UML 协作/通信图等)和业务流程(BPMN、ArchiMate、UML 活动图等)。我的建议是,团队不要重新发明轮子,而是使用这些现有的图表/符号来根据需要补充他们的 C4 模型图。

来自 c4model.com FAQ:“C4 模型的重点是构成软件系统的不同抽象级别的静态结构。如果您需要描述其他方面,请随时用 UML 图补充 C4 图, BPML图、ArchiMate图、实体关系图等”

  1. 扩展C4的等级是个好主意吗?C4 模型只有 4 级(不是递归的)。如果我需要第五个子系统级别怎么办?

当然,我见过一些团队这样做。只需确保您的“扩展”被记录下来并被您的团队/组织中的每个人理解即可。

  1. 容器图(第 2 级)的“数据库容器”是否应该包含有关数据库名称、模式名称或数据库技术的信息?从示例来看,不包含,ro 包含。

由你决定。如果您的数据库是标准 RDBMS 数据库/模式,并且不使用任何专有功能,那么您不一定需要指定该技术。相反,您可以在部署图上提及该技术。但是,如果您的数据库正在使用 RDBMS 的特定功能(例如 Oracle 存储过程),并且无法部署到不同的 RDBMS 上,那么您不妨指定技术来明确这一点。

  1. 除了官方文档中的琐碎内容之外,是否可以找到 C4 示例?

不幸的是,公开的例子很难找到……这只是组织不想公开其文档的本质。在 GitHub 上搜索“c4 model”应该会找到一些示例。