图表即代码 2.0
将图表代码化正成为一种绘制软件架构图的流行方式,尤其适用于长期存在的高级文档。您可以使用基于文本的领域特定语言(例如PlantUML、C4-PlantUML、Mermaid、WebSequenceDiagrams、Graphviz/DOT)或编程语言(例如Diagrams)编写图表源代码,然后使用基于 Web 或命令行的工具渲染图表。其优势显而易见——将图表源代码编写为文本可以轻松集成到软件开发实践和工具链中,此外,自动布局功能使作者能够专注于内容本身。
但是这种方法存在一个问题,我将其称为“图表即代码 1.0”——如果您需要创建多个图表,则需要创建多个图表源文件,并确保这些文件保持同步。
有些工具确实提供了“包含”代码片段的方法,但大多数工具并没有这样做,这迫使你在各个图表定义中重复信息。一旦你违反了“DRY 原则”,你就需要确保对一个图表所做的任何更改都会反映到其他地方。理论上很容易(“我们只需使用全局搜索和替换”等等),但在现实世界中并不一定会发生。
解决这个问题的一种方法是从单个源文件生成多个图表。为此,我们需要将思维从“图表”转向“模型的视图”。这就是“图表即代码 2.0”的精髓——它是一种定义软件架构模型和我们希望看到的视图的方法,最终为我们生成一组一致的图表。
这是 Structurizr 工具所实现的概念,其中大部分是开源的。Structurizr 基于“图表即代码”构建,提供了一种使用多种工具和编程语言从单个模型创建多个图表的方法。它包含三个关键概念:
- 工作区——这是模型和视图的定义,使用开放的 JSON 格式描述。
- 创作工具- 这些工具提供了创建工作区的方法。最受欢迎的是基于文本的Structurizr DSL。
- 渲染工具- 这些工具提供将视图渲染为图表的方法。支持的图表格式包括 PlantUML、C4-PlantUML、Mermaid、DOT、WebSequenceDiagrams、Ilograph 以及 Structurizr 云服务/本地安装。
创作和渲染的分离减少了对特定图表工具的依赖。拥有软件架构模型,可以对其进行切片和切块,从而创建许多不同的视图,然后使用最适合该任务的工具进行渲染……静态 PNG、可交互且可缩放的 SVG,或者交互式力导向图。
概括
总结一下主要区别:
- 图表即代码 1.0:手动编写图表定义
- 图表即代码 2.0:图表定义由工具根据模型视图自动生成
尽管许多团队都是手动定义他们的模型,但没有什么可以阻止您通过解析基础设施作为代码定义、解析分布式日志文件、执行代码库的静态分析等方式自动生成部分或全部模型。这些技术对于那些寻求绘制更大、更复杂的分布式架构图的团队特别有用。
文章来源:https://dev.to/simonbrown/diagrams-as-code-2-0-82k