GetterおよびSetterが含まれていますはなぜメソッドの凝集(LCOM)の欠如は、ここで示したように、私は、 <p><a href="http://www.ndepend.com/Metrics.aspx" rel="noreferrer">http://www.ndepend.com/Metrics.aspx</a></p> <p></p>だから、我々はいくつかのことを言っている、メトリックLCOMで探しています
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; }
}
ゲッターとセッターが「他のすべてのインスタンスフィールド」にアクセスしないため、スコアが0.94になります。
それは、次のように計算され、
accessAverage - methodCount/1 - methodCount
(2 - 17)/(1 - 17) = 0.94 (rounded)
私はこの指標を理解していないです、なぜそれがゲッターとセッターを含める必要がありますか? getterとsetterは、常に1つのインスタンスフィールドにアクセスします。
私は、LCOMメトリックでは自動プロパティをフィールドと同じにするべきだと主張します。 – Gabe
LCOMのようなメトリクスに関することは、実際にはクラスではない「評価」ということです。それは単なるダムPOCO(特定の非軽蔑的な意味を持つ「ダム」)、構造体(またはパスカル風のレコード)です。振る舞いはありません(メソッド間の状態関係によって典型的に表される振る舞い)。本当のクラス**ではありません。それは言語POVからではありますが、ドメインPOVからではありません(あなたが本当に気にしているものです)。私はPOJOSや構造体のLCOMメトリックの収集を避けるか、それらの結果を無視します。 LCOMは正しいです - それはクラスではありません。それに応じてその情報を使用してください。 –
ゲッターとセッターは実際にクラスの結束度を低下させるので、オブジェクト指向プログラミングでは避けなければならないかもしれません:http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil。 html – yegor256