Estoy buscando en el FCM métrica como se muestra aquí,¿Por qué la falta de cohesión de los métodos (FCM) Incluir captadores y definidores
http://www.ndepend.com/Metrics.aspx
Así que están diciendo algunas cosas,
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
Si miro a una clase como esta,
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; }
}
Obtiene una mala puntuación de 0.94 porque cada getter y setter no accede a 'todos los demás campos de instancia'.
Se calcula como este,
accessAverage - methodCount/1 - methodCount
(2 - 17)/(1 - 17) = 0.94 (rounded)
yo no soy la comprensión de esta métrica, ¿por qué debería incluir captadores y definidores? Un getter y un setter siempre accederán a un solo campo de instancia.
Yo diría que la métrica de LCOM debe considerar que las propiedades automáticas sean las mismas que los campos. – Gabe
Lo que pasa con las métricas similares a LCOM es que esa cosa de 'Evaluación', eso no es realmente una clase. Es solo un POCO tonto ("tonto" que tiene un significado específico, no despectivo), una estructura (o registro en el lenguaje parecido a Pascal). No tiene comportamiento (comportamiento típicamente representado por relaciones entre los métodos). Ergo, es no es una verdadera ** clase **. Puede ser desde un POV de lenguaje, pero no desde un POV de dominio (que es lo que realmente le importa). O evito recopilar métricas de LCOM en POJOS o structs, o ignoro los resultados para ellos. LCOM tiene razón, no es una clase. Simplemente usa esa información en consecuencia. –
Quizás porque getters y setters en realidad están reduciendo la cohesión de la clase y deben evitarse en la programación orientada a objetos: http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil. html – yegor256