自从 90 年代发明 UML 以来,我就一直在使用它,并且已经在大大小小的公司中使用它来实现各种目的。我使用 UML 有两个基本目的:作为 思考的便笺簿(有时我不知道自己在想什么,直到我看到我画的东西;)以及作为一种记录和交流的方式设计。以下是我的使用方法以及我的一些经验法则。
当其他工具不足以进行可视化/建模时,我会使用 UML。因此,如果您使用的是 SQLServer 数据库,您可以使用内置的设计图并将它们打印并粘贴到您的文档中。这里不需要 UML。
在思考设计问题时,我通常从墙到墙的白板开始,一旦设计具体化,我就会转向 UML 图(或在显示器之间来回移动)。
JavaScript 和 Ajax 开发。工具和可视化支持很弱。我使用 UML 来思考和展示复杂 JavaScript 应用程序的高级设计。 (如果您正在开发 Java 应用程序,则可以使用大多数 Java IDE 中内置的工具来可视化您的代码。另一方面,如果您正在开发 JavaScript 应用程序或工具很差,则很难做到这一点,因此 UML 可以填补空白。)
基于网络的应用程序的信息架构和导航。我使用 UML 来显示网页、它们的关系以及网页上的信息组件。这同样适用于任何类型的 GUI 中的屏幕(它曾经被称为用户体验模型)。我在基于 Web 的应用程序中使用 REST url。所以我注释我的页面对象以显示实际的 REST URL。这样,我在布置页面时同时考虑了 REST 部分。根据我的经验,这是最有用和未充分利用的图表类型之一——也许是因为它不是标准的。它捕获信息架构(您的域模型作为页面/屏幕的集合体验)和应用程序的概念作为一组可导航视图。这种最接近用户的模型与应用程序域模型或数据库模型之间经常存在不匹配。能够有这个模型充实了这个问题。我参与过每个人都有自己的应用程序模型要构建的项目:可用性人员、开发人员、数据库人员、企业架构师。但是没有人有正确的模型,用户体验模型充实了他们没有看到的东西。
基于代码的模型。我使用 Java 并对代码库进行逆向工程,并创建图表来记录设计。但是,由于 Java 工具非常成熟,我很少需要逆向工程来理解代码。我正在使用 Enterprise Architect,它价格低廉,允许您对新代码进行逆向工程并将其与基于旧代码的 UML 图同步。
我将所有这些不同的图表放在一个项目中,它将系统的总体设计描述为一组视图。我还将我的 UML 项目导出为 XML 并将它们存储在我的版本控制系统中。图表在 Intranet 上发布并插入到文档中。
组件图,永远不会。如果我想描述组件,我只需使用类图并用原型注释它:页面、视图、表格——以表示我的对象类型'米描绘。这对我来说很简单。我大量使用刻板印象。它们让我基本上可以创建自己的图表类型,但主要还是坚持使用类图。
我很少使用顺序图和活动图,但它们有时可能不可或缺且功能强大。当您计算对象的交互时,设计阶段的序列图。交互越复杂,您就越需要序列图。 (当序列图过于复杂时,这一事实可能表明您需要简化设计。)我发现序列图在对我继承的新项目进行逆向工程时最有用,并且需要快速上手。我发现它们可以让我在理解系统方面获得竞争优势。
最后,我倾向于准物理模型。基于要编写的实际代码或实际系统的模型,但出于通信目的进行了一些抽象和调整。介于“架构宇航员”的抽象抽象和复杂的基于代码的模型之间,这些模型细节过多,价值低于 IDE 的大纲视图。
总结一下。当需要更好的可视化和其他工具不足时,我使用 UML 进行思考、记录和交流设计。