【发布时间】:2011-08-26 03:54:31
【问题描述】:
我正在查看此处显示的 LCOM 指标,
http://www.ndepend.com/Metrics.aspx
所以我们要说几件事,
1) A class is utterly cohesive if all its methods use all its instance fields 2) Both static and instance methods are counted, it includes also constructors, properties getters/setters, events add/remove methods
如果我看到这样的课程,
public class Assessment
{
public int StartMetres { get; set; }
public int EndMetres { get; set; }
public decimal? NumericResponse { get; set; }
public string FreeResponse { get; set; }
public string Responsetype { get; set; }
public string ItemResponseDescription { get; set; }
public string StartText { get; set; }
public decimal? SummaryWeight { get; set; }
}
因为每个 getter 和 setter 都没有访问“所有其他实例字段”,所以它得到了 0.94 的差分。
是这样计算的,
accessAverage - methodCount / 1 - methodCount
(2 - 17) / (1 - 17) = 0.94 (rounded)
我不理解这个指标,为什么它应该包括 getter 和 setter? getter 和 setter 将始终只访问一个实例字段。
【问题讨论】:
-
我认为 LCOM 指标应该考虑自动属性与字段相同。
-
类似 LCOM 的指标的问题是,
Assessment的东西,这不是一个真正的类。它只是一个愚蠢的 POCO(dumb具有特定的、非贬义的含义),一个结构(或类似 Pascal 的说法中的记录。)它没有行为(行为通常由方法之间的状态关系表示。)因此,它是不是真正的类。它可能来自语言 POV,但不是来自域 POV(这是您真正关心的)。我要么避免在 POJOS 或结构中收集 LCOM 指标,要么忽略它们的结果。 LCOM 是对的——它不是一个类。只需相应地使用该信息。