在我看来,使用非正式的框线图而不是UML来可视化软件架构的主要原因是,对于我想传达的东西,UML往往不是一个合适的选择。我的语境图 、容器图 和组件图 呈现的信息可以通过用例、组件和部署图的混合使用获得,但我个人不觉得得到的图很容易用标记法解释。UML对我的可视化软件架构的C4方法 可能就没用,但我仍然将其用在我工作的软件项目上。
UML周边的工具使它可以被用在许多方面,包括带有关联仓库的全面综合模型,到从现有代码反向工程得到的图表。UML也可以用作简单的图表标记法,要么在白板上画草图,要么在微软Visio或OmniGraffle之类具有可安装的UML模板的工具中。这里是我对UML用途的总结。
- 流程和工作流 :如果要构建一个流程自动化或是基于工作流的软件,我往往绘画一张简单的UML活动图来表示。很多人似乎忽略了UML活动图,但是我发现简单的流程图式的标记法适用范围非常广。
- 运行时行为 :我的C4 方法真的只关注可视化软件系统的静态结构,但从运行时的角度来呈现系统往往是有用的。UML序列和协作图通常用于展示多个类在运行时协作实现一个特定的用户故事、用例、特性等。即使你的设计没有做到类这个级别,这些图表仍然非常有用。你可以展示协作容器或组件,而不是展示一系列协作类。
- 域模型 :如果想可视化一个域模型,我会使用UML类图,得到的图通常只展示最重要的属性和关系。通常在这种图上我会隐藏所有类的方法分隔。
- 模式和原则 :我经常需要解释如何在代码库中实现模式或原则(比如一本软件指南的代码 部分),UML类图显然是做这件事的方法。我的建议是让图保持简单,不要因感到有压力而展示每一个微小细节。
- 状态图表 :UML状态图是可视化状态机的好方法,标记法也相当直接。我发现人们总是忘记UML状态图的存在。
- 部署 :要展示你的容器或组件是如何部署的,UML部署图是一个很有用的方法。通常这种图呈现为非正式的框线图比较好,但决定权在你。