几个月前,我决定进入软件架构师的领域,将自己的软件开发技能提升到一个新的层次。之前,我已经参与过几个项目了,但我深深意识到,了解如何构建和设计可扩展、可维护的软件与编写干净的代码是非常重要的。
我首先开始探索软件架构中的基本最佳实践、原则与方法。
我联系了一些经验丰富的资深软件架构师,咨询他们每天使用的工具。我越深入地研究,就越清楚,选择正确的工具对于任何架构师来说都非常必要的。
从绘制系统组件到建模基础设施,运用正确的工具使架构决策更加结构化和有效。
为了运用所学知识,我决定使用开源工具来设计金融科技应用程序。
在此过程中,我得出一些结论来,实际上并没有一种软件架构的最佳工具。
你正在开发的架构类型、你的角色以及组织规模都会影响到所需要的工具。对于小型 SaaS 应用程序,个人开发人员可能会使用代码优先的轻量级工具,而创建分布式系统的企业架构师可能需要正式的建模框架。
我还根据工作确定了软件架构工具的几个逻辑类别。这些包括建模和图表绘制、设计和分析、云架构设计、协作和文档、代码分析和可视化以及测试。虽然我主要关注建模工具,但这些更广泛的分类更有助于满足各种架构需求。
对于软件架构师来说,图表对于理解系统组件、数据流和基础设施至关重要。
我整理了一份个人认为最有用和最容易使用的工具列表。我更倾向于使用那些有助于可视化、记录和构建架构的工具,希望对大家有所帮助。
Graphviz是我们列表中的第一个工具,因为有几种建模和图表工具以某种方式扩展和使用它。它是一种提供基于代码的方法来生成图形建模图的软件。
注意:本文中将交替使用基于文本和基于代码这两个词。它们的意思相同 - 使用某种形式的语法来绘制图表和模型。另一个需要注意的是,基于代码的图表生成可以轻松添加版本控制并将 CI/CD 集成到图表/模型创建过程中。
架构师应该关心图形可视化的原因是,许多应用程序(尤其是大型应用程序)与许多依赖项、微服务、API、第三方集成等高度互连。为了清楚地了解这些互连及其关系,架构师需要以可视化的方式映射它们。
Graphviz 提供了一种定义和呈现这些图形的有效方法。下面总结Graphviz 的主要功能如下:
它使用DOT 语言,这是一种简单但功能强大的生成图形的语法。
Graphviz 具有命令行界面实用程序,允许用户快速将 DOT 脚本转换为图表。这允许您使用脚本自动执行图表生成工作流程。
Graphviz 提供多种布局引擎,使用专门的算法来构造图形。这让架构师可以选择在图形呈现中使用分层、径向或力导向布局。
建筑师可以使用其可自定义的布局功能来控制节点定位、边缘连接和层次结构。这可确保您生成的图表适合您的特定需求。
它支持多种输出格式,例如 PNG、SVG、PDF 和 JSON。这些选项可让您轻松将 Graphviz 生成的视觉效果集成到 Web 应用程序和文档中。
我认为 Graphviz 是一种可扩展的工具,可用作其他建模工具的基础组件。但对于图形连接,使用基于图表的工具和拖放功能来绘制它们很容易。
Graphviz 的官网:
https://gitlab.com/graphviz/graphviz
DOT语言官网:
https://en.m.wikipedia.org/wiki/DOT_(graph_description_language)
软件架构师可以生成的图表:
UML 图,如序列图、用例图、类图、部署图等。
非 UML 图,如 ER 图、甘特图、EBNF 树等。
可以通过添加超链接和工具提示来创建交互式图表以提供更多背景信息。
PlantUML 允许使用 Unicode、图标和富文本格式来创建视觉增强的图表,从而提高可读性和演示效果。
在底层,PlantUML 使用各种渲染引擎来生成图表,为您提供多种选择。其中一些引擎包括 Graphviz(前面介绍过)、Smetana(基于 Graphviz)、Puma 等。
导出图表很灵活,它可以输出 PNG、SVG、LaTeX 甚至 ASCII 艺术。
为了获得更好的图表,建议你调整渲染引擎,不同的引擎可能会渲染略有不同的图表。
通过模块化图表来组织大型图表,这类似于将代码分解为更小、更易于管理的组件。你还可以使用其容器功能对图表进行分组,以提高复杂可视化中的可维护性和可重用性。
使用glob可以轻松地在图表中进行更改。
使用工具提示和超链接为图表提供额外的背景和交互性。
为图表添加动画。
使用其在线游乐场快速创建和共享图表,无需安装任何东西。
使用几乎任何自然语言来创建图表。
直接从命令行轻松导出 SVG、PNG 和 PDF 文件。
我喜欢 D2 文档的深度和随之而来的用户友好性。渲染的图表也很优秀,精细而流畅。然而,它不是像软件那样的独立工具,因为它是一种语言。除非你使用它的操场或 CLI,否则你需要集成它才能直观。
它支持多种建模标准。
添加到模型中的每个元素都以图表的形式直观呈现,去掉了隐藏属性或侧面板。使模型更加易于理解和导航。
可以使用插件来扩展其功能,以实现代码生成、文档导出和其他集成。
使用其树形视图导航功能,快速定位和管理模型中的不同元素。此功能简化了复杂图表和大型项目的工作。
它更适合那些将标准合规性放在首位的人士。
此外呢,由于它是一款独立软件,维护人员的更新不会像基于浏览器的工具那样即时更新,需要下载才能获得最新的版本。
Mermaid是一款基于浏览器的图表工具,可将基于文本的定义转换为动态视觉效果。它允许开发人员使用类似 Markdown 的语法编写图表,并能够即时动态地呈现。
它的主要特点,下面总结如下:
一种易于使用的语法,就像在写 Markdown 一样,可以轻松创建和修改视觉效果,而无需复杂的工具。
动态渲染,即你可以使用实时编辑器动态修改图表,并在编辑时立即看到更新。
多图表支持允许架构师创建流程图、序列图、状态图等。
许多可用的集成可与 GitHub、GitLab、Notion、Obsidian 等其他流行工具配合使用。
对于那些想要一款在集成方面表现出色的工具的架构师来说,Mermaid 是上好的选择。具有 JavaScript 开发背景的开发人员也许会更喜欢它。
Magic Connector - 这项功能可自动正确连接模型元素。这有助于减少手动工作量并提高准确性。
ArchiMate Views & Viewpoints 用于将模型与利益相关者的观点相结合,有助于确保不同目标受众的清晰度和相关性。
提示视图可对您的模型元素和关系提供反馈,帮助您应用正确的建模约定和最佳实践。
显示关系的可视化器提供了复杂模型连接的清晰、结构化的视图。
在建立模型之前,可以使用 Sketch View 和 Canvas Modelling 进行头脑风暴、设计和构建想法。
对于 Linux 用户,你可能会发现使用此软件时会出现一些用户界面问题,比如下载页面中指出的那样。需要更新它,你可能还需要卸载一些版本,不确定这是否适合你。
它的用户指南是一个 PDF 文件,这意味着如果架构师即使下载了 PDF 文件,可能会遵循过时的手册指南,但是免费的还好用的工具,其它多注意一下也没问题。
现在向大家介绍的是一个以企业架构建模为傲的工具叫做Modelio。
它支持多种行业标准,使其成为从软件设计到企业架构等不同领域工作的绝佳选择。
借助 Modelio,软件架构师可以做到以下几点:
支持 UML、BPMN、ArchiMate 和 TOGAF 标准,因此可以对业务流程和企业架构进行建模。
使用其 XMI 导入/导出功能轻松地在不同工具之间交换 UML2 模型
使用 HTML 发布器模块以 HTML 形式发布和共享模型
利用其可扩展性添加自定义方法和技术,使他们能够根据特定的项目需求修改工具。
利用 Jython 脚本自动执行重复任务并有效提高生产力。
我观察了一下,该工具的文档、网站和 GitHub 代码并没有做定期更新,需要各位小伙伴做一番斟酌来使用。
有时,你可能不需要严格的 UML 建模工具。像Diagrams.net这样简单但功能强大的图表工具是一个不错的选择。
它与云平台、流行应用程序和版本控制系统集成。它还提供安全第一的设计和高级协作功能。
虽然此工具非常适合 UML 图表,但它的功能不止于此。您还可以创建其他图表类型,如流程图、思维导图等。
它的一些功能包括如下:
多种存储选择,让用户根据自己的需求安全、高效地工作。
丰富的模板库,可访问 AWS、Azure、GCP、IBM 等平台的各种预构建模板,实现快速系统建模。
使用自动布局和格式化功能自动排列元素,提高可读性。
协作和集成功能可用于与团队合作并将图表集成到您最喜欢的生产力工具中。使用共享光标功能,您可以在处理同一张图表时看到其他团队成员的光标和实时编辑,从而确保团队合作顺畅。
协作功能仅在生产版本中可用,而不在 GitHub 版本中,正如项目的README中指出的那样。
它完全可定制,甚至可嵌入定制软件中以获得完全集成的体验。
最后,由于其 PlantUML 和 Mermaid 支持,您可以使用基于代码的图表自动创建图表。
此工具功能丰富,是那些想在图表工作流程中试用多种功能的人的最佳选择。我甚是喜欢这个工具。 🙂
Excalidraw是列表中的另外一个工具。它是一款轻量级的基于浏览器的白板工具,建筑师可以使用它来绘制和集思广益建模想法。它的风格给人一种手绘草图的印象。选择 Excalidraw 的一些原因包括如下:
支持离线工作。它还会自动将工作保存到浏览器,这样您可以在关闭浏览器后从当前位置继续工作。
由于端到端的加密功能,数据交换变得很安全。
多用户编辑支持团队协作,由于之前强调的加密功能,该功能是安全的。
图像上传功能允许您重复使用图像中的图表。
预先创建的形状和组件,可轻松创建图表。
它入门比较简单,可生成可靠的架构图。
tldraw 的使用方式与 Excalidraw 类似,两者具有相同的功能,因此我这里就不重复讨论 tldraw 的功能了。
但是值得向大家一提的,tldraw 的一个功能是它的SDK。开发者21可以使用 SDK 将白板集成到应用程序中。由于本文面向软件架构师,因此不深入讨论 SDK。
我对它的评价与对 Excalidraw 的评价相同 — 它非常适合用来做集思广益。
排名第 11 位的是 Cerbos Policy Decision Point (PDP)。
Cerbos PDP与其他工具的不同之处在于,虽然所有其他工具都专注于图表和可视化,但 Cerbos PDP 却还有着不同的用途。
它提供了一个可以在几分钟内启动并运行开源授权解决方案。在设计软件架构时,拥有安全的访问控制与定义系统组件和数据流一样重要。
因此,使用 Cerbos PDP,我们可以做到如下:
从单一位置定义和管理授权策略,确保整个系统的策略更新之一致性。
根据用户角色、属性和其他上下文因素实施细粒度的访问控制,确保根据特定用户情况调整访问权限。
在提出访问请求时立即评估并执行策略,确保安全性而不影响系统性能。
使用你选择的身份验证服务提供商,Cerbos PDP 支持几乎所有提供商。
结语
以上,是几款图表即代码工具供各位架构师们选择,重要的提醒的是请仔细考量哪种最适合自己的用例。
一些关键事项,包括如下几点:
开源许可证和维护项目的团队。
支持您希望使用的标准和图表类型。
对于需要使用该工具的人来说,访问和学习曲线。
如果各位同学有其它补充,也欢迎留言点评。春天到了,请保持清醒愉悦哦!~
作者:场长
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。