C4模型实践

C4 model in practice

看了C4 model and listening Simon Brown's talk我还是不明白如何在实践中使用它。

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

C4没有细节怎么办?我应该自定义到什么程度?

例如:

  1. 基础架构、数据流或业务流程等支持图如何适合 C4?
    例如,routers/firewalls/api-gateways/service-buses C4 的容器在基础架构图中?我找不到任何示例。
  2. 扩展 C4 的级别是个好主意吗?
    C4 模型只有 4 个级别(不是递归的)。如果我需要第 5 个子系统级别怎么办?
  3. 容器图(第 2 层)的“数据库容器”是否应包含有关数据库名称、模式名称或数据库技术的信息?
    从示例中,doesn't contain, ro does contain.
  4. 是否可以从官方文档中找到除了琐碎的 C4 示例?

C4 model 旨在简化操作。在许多细节仍不确定的时刻,它简化了早期的架构工作。它有助于与不熟悉 UML 符号的所有微妙之处的人进行团队讨论。

(1)

它并不打算成为适用于所有事物的通用图表技术。所以不,没有业务流程建模。上下文级别图提供了一些更多信息,如关于用户与系统交换内容的用例图。但它停在那里。 BPMN (or for UML activity diagrams which were demonstrated 与 BPMN 一样具有表现力的市场仍然存在。

它既不打算取代基础结构图或硬件设计。它专门针对软件密集型系统的需求:什么软件运行在哪里以及如何运行。如果需要详细信息,UML 部署图并没有死。话虽如此,我认为添加一些框来表示防火墙很容易,就好像它们是软件元素一样,如果需要了解体系结构的话。 API 网关最终到达 C4 图片(风格类似于 this example)。

(2)

C4 级别 3 是组件。第 4 级允许您使用任何现有的建模符号来显示更多细节。无需重新发明轮子。如果组件仍然非常复杂,您可以使用 UML 的全部功能及其递归地根据需要(并且仅在需要时)进行更深入。

(3)

这是需要的。您可能会开始您的体系结构,只是确定需要一个数据库。但也许稍后,您的环境中会有多个模式,您需要消除歧义。或者只是想记录名称。

(4)

当然可以,但这超出了这里的范围。

  1. How supporting diagrams like Infrastructure, Data Flow or Business process fit into C4? For example, are routers/firewalls/api-gateways/service-buses a C4's Containers at Infrastructure diagram? I couldn't find any example.

构成 C4 模型的核心图表旨在以不同的细节层次关注静态结构。 c4model.com 中还定义了一些补充图,其中一个是部署图……这是我为路由器、防火墙、负载平衡器等建模的地方。

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

来自c4model.com常见问题解答:“C4模型的重点是构成软件系统的静态结构,处于不同的抽象层次。如果您需要描述其他方面,请随时补充C4 图与 UML 图、BPML 图、ArchiMate 图、实体关系图等

  1. Is that a good idea to extend C4's levels? C4 model has only 4 level (isn't recursive). What if I need the 5th subsystem level.

当然,我见过团队这样做。只需确保 team/organisation.

中的每个人都记录并理解您的“扩展名”
  1. Should "Database Container" at container diagram (level 2) contain information about about database name, schema name or database technology? From examples, doesn't contain, ro does contain.

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

  1. Is that possible to find C4 examples besides trivial from the official doc?
不幸的是,

Public 很难找到示例……这正是不想制作文档的组织的本性 public。在 GitHub 上搜索“c4 模型”应该可以找到一些示例。