C4模型实践
C4 model in practice
看了C4 model and listening Simon Brown's talk我还是不明白如何在实践中使用它。
AFAIK,C4 模型的主要贡献是对简单抽象的“一致”,使图表和文档更接近开发人员。在同一个 C4 中更多的是关于建议,你必须自己弄清楚一些东西(这再次打破了与自定义抽象的“协议”)。
C4没有细节怎么办?我应该自定义到什么程度?
例如:
- 基础架构、数据流或业务流程等支持图如何适合 C4?
例如,routers/firewalls/api-gateways/service-buses C4 的容器在基础架构图中?我找不到任何示例。
- 扩展 C4 的级别是个好主意吗?
C4 模型只有 4 个级别(不是递归的)。如果我需要第 5 个子系统级别怎么办?
- 容器图(第 2 层)的“数据库容器”是否应包含有关数据库名称、模式名称或数据库技术的信息?
从示例中,doesn't contain, ro does contain.
- 是否可以从官方文档中找到除了琐碎的 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)
当然可以,但这超出了这里的范围。
- 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 图、实体关系图等
- 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.
中的每个人都记录并理解您的“扩展名”
- 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 上,那么您最好指定技术来明确这一点。
- Is that possible to find C4 examples besides trivial from the official doc?
不幸的是,Public 很难找到示例……这正是不想制作文档的组织的本性 public。在 GitHub 上搜索“c4 模型”应该可以找到一些示例。
看了C4 model and listening Simon Brown's talk我还是不明白如何在实践中使用它。
AFAIK,C4 模型的主要贡献是对简单抽象的“一致”,使图表和文档更接近开发人员。在同一个 C4 中更多的是关于建议,你必须自己弄清楚一些东西(这再次打破了与自定义抽象的“协议”)。
C4没有细节怎么办?我应该自定义到什么程度?
例如:
- 基础架构、数据流或业务流程等支持图如何适合 C4?
例如,routers/firewalls/api-gateways/service-buses C4 的容器在基础架构图中?我找不到任何示例。 - 扩展 C4 的级别是个好主意吗?
C4 模型只有 4 个级别(不是递归的)。如果我需要第 5 个子系统级别怎么办? - 容器图(第 2 层)的“数据库容器”是否应包含有关数据库名称、模式名称或数据库技术的信息?
从示例中,doesn't contain, ro does contain. - 是否可以从官方文档中找到除了琐碎的 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)
当然可以,但这超出了这里的范围。
- 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 图、实体关系图等
- 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.
中的每个人都记录并理解您的“扩展名”
- 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 上,那么您最好指定技术来明确这一点。
不幸的是,
- Is that possible to find C4 examples besides trivial from the official doc?
Public 很难找到示例……这正是不想制作文档的组织的本性 public。在 GitHub 上搜索“c4 模型”应该可以找到一些示例。