计算包的 Martin-Metrics
Calculate the Martin-Metrics for packages
计算见:https://101.jqassistant.org/calculate-metrics/index.html
- Ca(传入耦合):
此组件外的 类 数量取决于此组件内的 类。简而言之:传入依赖项的数量。
- Ce(传出耦合)
此组件内的 类 数取决于此组件外的 类。简而言之:传出依赖的数量。
给出的是汽车模拟应用程序的 UML 图。每一层代表它自己的包。
计算四个包的 Martin-Metrics。
除了初始化之外,这是分层体系结构的正确示例。因此重新计算传入传出耦合,这次没有初始化包。
哪个数字给出了提示,这三个包可以形成正确的分层架构?
我想知道我的解是否正确以及我是否计算正确。
如何在 UML 图中查找依赖关系?
直接依赖项用虚线箭头记录。
依赖关系也可以从关联(以及聚合和组合)中扣除:
- 当存在未指定的导航性和没有关联端所有权时,我们不能说什么:关联可以拥有端点并管理链接。
- 我们可以假设可导航关联和拥有的关联端(点表示法)存在依赖关系:关联至少需要了解箭头或点端的 class。
- 在相反方向未指定通航能力的情况下,我们无法确定反向依赖;它可以导航也可以不导航。我们可以假设不存在依赖关系,因为这里没有正式标识依赖关系。
我们假设图表是全面的并且确实显示了所有相关的 classes。
图表和指标中的依赖项清单
库存:
SensorBus
直接依赖于Dashboard
。请注意,依赖项 notifies()
的标签非常奇怪。它是使用依赖性(即操作 notifies()
使用 Dashboard
作为参数,但它从哪里获得此参数)?
初始化中的Startup
依赖于Dashboard
、SensorBus
和Car
Dashboard
在 UI 取决于 Locale
功能层的SensorBus
依赖于Sensor
、Car
以及同包Weather
和Locale
[=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:Car
、Sensor
和 Dashboard
.
您的背景存在问题material
您的链接文档中使用的措辞对 Ce 含糊不清:
- "组件内部 classes 的数量依赖于组件外部 classes" 与定义的第二部分相矛盾,因为它不对应于“传出流量”。
- 正确的定义更像是“一个包中的 classes 所依赖的其他包中的 classes 的数量”(来源:wikipedia and this blog)
另外,计算的包级有问题:
- Ca 和 Ce 定义明确 classes 很容易应用,因为你只计算唯一性 class在依赖项的一侧或另一侧。
- 对于组件和包,我们还应该继续计算 classes 吗?或者我们应该在包的同类级别上工作,即计算与其他包的依赖关系? Martin 和大多数作者选择 classes。但这似乎不一致:如果我有一个包 class 公开嵌套类,依赖项将计算顶级 class (因为嵌套 class 只是封闭 class) 而具有直接提供相同 classes 而不是嵌套它们的封装的相同设计将计数更多 classes 和更高的 Ca 或 Ce。
计算见:https://101.jqassistant.org/calculate-metrics/index.html
- Ca(传入耦合): 此组件外的 类 数量取决于此组件内的 类。简而言之:传入依赖项的数量。
- Ce(传出耦合) 此组件内的 类 数取决于此组件外的 类。简而言之:传出依赖的数量。
给出的是汽车模拟应用程序的 UML 图。每一层代表它自己的包。
计算四个包的 Martin-Metrics。
除了初始化之外,这是分层体系结构的正确示例。因此重新计算传入传出耦合,这次没有初始化包。
我想知道我的解是否正确以及我是否计算正确。
如何在 UML 图中查找依赖关系?
直接依赖项用虚线箭头记录。
依赖关系也可以从关联(以及聚合和组合)中扣除:
- 当存在未指定的导航性和没有关联端所有权时,我们不能说什么:关联可以拥有端点并管理链接。
- 我们可以假设可导航关联和拥有的关联端(点表示法)存在依赖关系:关联至少需要了解箭头或点端的 class。
- 在相反方向未指定通航能力的情况下,我们无法确定反向依赖;它可以导航也可以不导航。我们可以假设不存在依赖关系,因为这里没有正式标识依赖关系。
我们假设图表是全面的并且确实显示了所有相关的 classes。
图表和指标中的依赖项清单
库存:
SensorBus
直接依赖于Dashboard
。请注意,依赖项notifies()
的标签非常奇怪。它是使用依赖性(即操作notifies()
使用Dashboard
作为参数,但它从哪里获得此参数)?
初始化中的Startup
依赖于Dashboard
、SensorBus
和Car
Dashboard
在 UI 取决于Locale
功能层的SensorBus
依赖于Sensor
、Car
以及同包Weather
和Locale
[=81] =]Car
在 HW-layer 依赖于Sensor
在同一个 packageSensor
在 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:Car
、Sensor
和 Dashboard
.
您的背景存在问题material
您的链接文档中使用的措辞对 Ce 含糊不清:
- "组件内部 classes 的数量依赖于组件外部 classes" 与定义的第二部分相矛盾,因为它不对应于“传出流量”。
- 正确的定义更像是“一个包中的 classes 所依赖的其他包中的 classes 的数量”(来源:wikipedia and this blog)
另外,计算的包级有问题:
- Ca 和 Ce 定义明确 classes 很容易应用,因为你只计算唯一性 class在依赖项的一侧或另一侧。
- 对于组件和包,我们还应该继续计算 classes 吗?或者我们应该在包的同类级别上工作,即计算与其他包的依赖关系? Martin 和大多数作者选择 classes。但这似乎不一致:如果我有一个包 class 公开嵌套类,依赖项将计算顶级 class (因为嵌套 class 只是封闭 class) 而具有直接提供相同 classes 而不是嵌套它们的封装的相同设计将计数更多 classes 和更高的 Ca 或 Ce。