uml - 如何在 UML2 组件图中正确使用端口和接口
问题描述
我还不太了解如何在 UML2 组件图中使用端口、连接器和接口。
我知道组件可以是物理组件或逻辑组件,接口是否相同?例如,所需的导入成为组件图中的必需接口或类图中的简单用法?而且我也不理解端口作为交互点的概念:只是微服务中进入和退出点的表示吗?
为了理解我在应用程序中做了两个非常典型的场景(我是一个 java 开发人员)。
方案 1
一种典型的外观模式,我的客户端应用程序需要通过外观调用多个 Web 服务(rest 或 soap)。
我尝试在组件图中表示:
1b)客户端和外观组件之间的接口使用正确还是我只需要一个简单的<>?物理上没有接口,只有一个类导入,但逻辑上甚至外观组件都暴露了一个 API(与 Web 服务 API 不同)。不需要端口,因为客户端和外观不是完全独立的软件,对吗?
1c)在外观和服务之间我需要端口,因为我们连接到各种独立的软件(可能不是我们的软件)。是正确的?
场景 2 现在我在 Java Web 应用程序中制作了第二个场景,它也是非常典型的。出于业务目的需要调用 EJB(具有接口的远程类)的 MVC 应用程序。
我的组件图:
2a)在这种情况下,我的用户界面包含在演示组件中,在各种 UI 和整个组件之间建立了委托连接。这是正确的使用方法吗?
2b)当我调用Web服务并且需要使用端口时,表示和业务组件之间的情况与场景1相同吗?
如果我的组件图有误,请帮助我理解我的错误以及如何为这些场景制作正确的组件图。
解决方案
这几乎没问题。你的Delegate
课看起来是多余的。委托是一个更抽象的概念:
<<delegate>>
因此,您只需从端口向组件内部负责的类、组件或属性绘制关系。您也可以像以前那样委托给内部接口。
我查找了 UML 2.5 的委托。在第 189 页:
委托连接器是将端口链接到所属封装分类器中的角色的连接器。它代表请求的转发(操作调用和信号)。到达具有一个或多个属性或属性上的端口的委托连接器的端口的请求将被传递到这些目标以进行处理。
委托连接器可用于对行为的分层分解进行建模,其中由 EncapsulatedClassifier 提供的服务最终可能由嵌套在其中的多个级别的服务来实现。
作为 ConnectableElement,Port 的有效提供接口(见 11.2.3)是其提供的接口,有效的所需接口是其所需的接口。但是,对于委托端口,即位于委托连接器末端且不在角色上且不是行为端口的端口,有效提供的接口是其所需的接口,其有效的所需接口是其提供的接口。因此,对于连接而言,委托端口的行为就好像它有一个内部“面”,该“面”是其外部“面”的共轭。</p>
如果在一个端口的一侧附加了多个连接器,那么任何通过从端口另一侧的连接器派生的链路到达该端口的请求都将在与这些连接器对应的链路上转发。未定义这些请求是在所有链接上转发,还是仅在其中一个链接上转发。
该页面周围还有更多关于端口的信息。
推荐阅读
- python - 未捕获的类型错误:无法读取未定义 D3.JS 的属性“权重”
- c# - 是否可以从字符串重建委托?c# .NET Core
- c++ - 如何删除最新添加的书?
- javascript - MongoDB Node.js 脚本实现
- google-sheets - Google 表格:当单元格 B2 不为空时,将数据向下移动一行或在数据上方添加一行
- c# - ASP.NET Core 2.x 默认为不存在路由
- akka - 为什么停止演员会增加 CPU 使用率?
- compiler-errors - 从方法内的模式匹配返回时,在当前范围内找不到关联类型
- css - 如何让 ng-grid 像 domReady 一样适合宽度
- javascript - 当更改类的代码遥不可及时如何触发类更改事件