针对开发人员的UML

互联网上充斥着有关UML的文章,您将为每种类型的图找到数百个示例,并且可以毫无问题地创建自己的示例,表示法并不复杂。但是,真的有必要花时间在这上面吗?我们丰富的经验表明可以。如果团队中有两个以上的人,并且一个项目需要3个月或更长时间,那么绘制2-3种类型的图已经很有意义。我们的团队有30多人,一个项目持续3年以上,我们使用2-3种图表。

UML表示法是多余的。另一方面,这还不足以设计分布式系统,在这里Archimate可以为我们提供帮助。在本文中,我们将告诉您所有这些变化中什么才是真正有用的,并以创建项目图的整个周期为例。

我们将汲取什么?


如果您的目标是“快速而美观”(例如,用于演示或本文),则Visio更为合适:其编辑器很方便,并且可以避免任何与符号的偏离。

如果您从事设计,那么您将需要一个完整的系统来支持图表之间的关系。我们使用Enterprise Architect产品,便宜又开朗。
设计系统的比较和有关如何正确使用它们的故事是另一篇文章的主题。

技术任务


我们将设计一个假设的移动应用程序来学习外语。职权范围通常是由分析师准备的,他们将准备第一批图表。在这种情况下,仅要求开发人员正确阅读它们。

最简单的图是用例:



该图显示了用户的类型,并列出了与他们相关联的功能或功能组。以蓝色突出显示的元素不在UML中,但经常缺少:需求-需求(来自Archimate表示法),功能的完善。

你问-有什么意义?毕竟,可以在一个紧凑的列表中简单地以文本指定功能列表!您将是对的,但有细微差别。

  1. 有些功能涉及几个用户,因此很难显示文本。
  2. 在设计系统中绘制所有功能和需求时,可以将它们上载到同一Jira,然后将它们与任务和错误相关联,从而简化了项目管理。

为什么我们在同一张图中混合了UML和Archimate?您无需严格遵循这些符号;您不必为此通过大学考试,而无需与团队进行沟通,为此您已经为此做好了准备。

为什么我们使用线条而不是箭头来连接元素?因为没有人记得“ Generalization”(通用)和“ Extension”(扩展)箭头的外观,以及它们的一般含义。绘制得越简单,没有您的参与,就会有更多的人理解图表。

您可以在技术任务中遇到的第二种图表是“ 活动图”:



在这里,除了一件事之外,一切对开发人员来说都是显而易见的:AI为什么要拨打学生电话?才不是。此图是由分析人员而不是程序员绘制的,他们不知道客户端在哪里,但是在服务器在哪里,并且他们对数据流不感兴趣。在活动图上,您看到一系列动作,仅此而已。如何用此制作代码?我们进入设计阶段。

架构设计


移动应用程序的体系结构是显而易见的:客户端,服务器,数据库。如果我们正在设计一些严肃的东西,那么我们应该注意将项目划分为子系统,在我们的情况下,它将至少是:

  • 课程预订子系统
  • 网络培训子系统
  • 开票
  • 录音管理子系统

子系统应该彼此隔离:它们自己的数据库,不能与其他子系统建立关系连接,子系统之间只能通过API进行通信。子系统可以是一组微服务,也可以是一个整体。

您可以将每个子系统分配给一个专门的开发团队,他们将使自己沉浸在主题中,并减少对同事意外计划的干扰。

对于每个子系统,需要一个架构方案,如何正确绘制它?为此,UML中没有合适的图,让我们看一下Archimate:



即使不知道符号,该图通常也是可读的。请记住,您的团队中有90%的人都不知道UML,更不用说Archimate了,他们永远也不会学习这些记号,因此请专注于题词。但是,关于立方体和箭头的



几句话是:您可以轻松找到完整的Archimate规范。

颜色-随您的喜好,符号不会以任何方式对其进行调节。当前子系统使用一种颜色进行着色,相邻子系统使用第二种颜色进行着色,外部系统使用第三种颜色进行着色,这大大提高了电路的可读性。

该图仅使用两种类型的箭头:Flow和Access。该流程显示了数据传输的方向以及呼叫-谁正在与谁通话。应该正确理解流向箭头:



虽然实际上是从移动应用程序到服务器的流程图,但图中没有显示(“数据请求”流排在最前面)。这样做是为了使该方案更易于阅读:我们仅显示最重要的方案。从题词API的多维数据集已经可以明显看出还有一个初始数据请求的事实。

详情


最后两个图非常有用(当然,细心的读者会注意到不再有2-3种类型的图):顺序图(类图)和类图(类图,但根本不适用于类)。

有时,客户端与服务器之间的交互是多阶段的,需要使用第三种资源。例如,使用Oauth2授权:很难理解此过程的文本描述。这里的序列图将帮助我们



这个Oauth2实现不是参考,可以有很多选择。在图中最要了解的是,图中没有数据流,只有呼叫和呼叫应答。尽管这并没有阻止我们用箭头上的文本指定流。

当您深入研究序列图时,您会发现它可以显示循环和分支,但不会滥用它们:您无需绘制分支“如果用户选择了本地授权”“如果选择了FB授权”,为每个选项绘制两个方案。时序图上的条件,尤其是嵌套条件,极大地降低了电路的可读性。

最后一个图(不是今天,而是总体而言)是类图。她的名字在讲话,假设可以在她的课堂上进行设计。在DOS文本编辑器的早期,这可能是有道理的,但是现代开发环境使您可以设计和分析类,而不必离开它们的黑暗和光亮主题。

但是类图的实际应用仍然存在-数据库设计:



如果您知道什么是关系数据库,那么这显然不言而喻。图上的属性未完全签名,仅显示了关系,数据类型,有时还显示了限制。

不要尝试在Visio,Enterprise Architect或同等版本中绘制它。对于数据库设计,有许多专门针对特定DBMS的专用工具,请使用它们。

就这样。实际上,在UML和Archimate中的所有图表中,列出的绰绰有余。一个项目需要每种类型多少个图?我应该为每个过程和子系统绘制它们吗?主要规则是该图与文字描述一起使用,仅在文字不足的情况下才需要使用该图,即 团队不了解您的地方。

感谢您的关注,有一家软件产品公司与您合作。

All Articles