计算包的 Martin-Metrics

Calculate the Martin-Metrics for packages

计算见:https://101.jqassistant.org/calculate-metrics/index.html


给出的是汽车模拟应用程序的 UML 图。每一层代表它自己的包。

计算四个包的 Martin-Metrics。

除了初始化之外,这是分层体系结构的正确示例。因此重新计算传入传出耦合,这次没有初始化包。

哪个数字给出了提示,这三个包可以形成正确的分层架构?

我想知道我的解是否正确以及我是否计算正确。

如何在 UML 图中查找依赖关系?

直接依赖项用虚线箭头记录。

依赖关系也可以从关联(以及聚合和组合)中扣除:

  • 当存在未指定的导航性和没有关联端所有权时,我们不能说什么:关联可以拥有端点并管理链接。
  • 我们可以假设可导航关联和拥有的关联端(点表示法)存在依赖关系:关联至少需要了解箭头或点端的 class。
  • 在相反方向未指定通航能力的情况下,我们无法确定反向依赖;它可以导航也可以不导航。我们可以假设不存在依赖关系,因为这里没有正式标识依赖关系。

我们假设图表是全面的并且确实显示了所有相关的 classes。

图表和指标中的依赖项清单

库存:

  • SensorBus直接依赖于Dashboard。请注意,依赖项 notifies() 的标签非常奇怪。它是使用依赖性(即操作 notifies() 使用 Dashboard 作为参数,但它从哪里获得此参数)?
  • 初始化中的
  • Startup依赖于DashboardSensorBusCar
  • Dashboard 在 UI 取决于 Locale
  • 功能层的
  • SensorBus依赖于SensorCar以及同包WeatherLocale[=81] =]
  • Car 在 HW-layer 依赖于 Sensor 在同一个 package
  • Sensor 在 HW-layer 依赖于 SensorType 在同一个 package

根据您的定义,这导致我们:

                      Ca    Ce
----------------------------------
Initialization         0     3
UI                     2     1
Functional layer       2     3 !!
HW layer               2 !!  0

是:硬件包之外的 2 classes 取决于 HW classes.
是的:功能层 SensorBus 依赖于 3 个外部 classes:CarSensorDashboard.

您的背景存在问题material

您的链接文档中使用的措辞对 Ce 含糊不清:

  • "组件内部 classes 的数量依赖于组件外部 classes" 与定义的第二部分相矛盾,因为它不对应于“传出流量”。
  • 正确的定义更像是“一个包中的 classes 所依赖的其他包中的 classes 的数量”(来源:wikipedia and this blog

另外,计算的包级有问题:

  • CaCe 定义明确 classes 很容易应用,因为你只计算唯一性 class在依赖项的一侧或另一侧。
  • 对于组件和包,我们还应该继续计算 classes 吗?或者我们应该在包的同类级别上工作,即计算与其他包的依赖关系? Martin 和大多数作者选择 classes。但这似乎不一致:如果我有一个包 class 公开嵌套类,依赖项将计算顶级 class (因为嵌套 class 只是封闭 class) 而具有直接提供相同 classes 而不是嵌套它们的封装的相同设计将计数更多 classes 和更高的 Ca 或 Ce。