LoC simplemente no es una métrica valiosa. En su lugar, mira cuánto hace un método. Un método generalmente debería hacer una cosa. En mi humilde opinión, a veces es bueno abordar 1 o 2 operaciones muy simples. Por ejemplo, calculando el perímetro de un rectángulo:
Podría ser:
public int GetPerimeter(int side1, int side2)
{
totalWidthLength = side1 * 2;
totalHeightLength = side2 * 2;
return totalWidthLength + totalHeightLength;
}
-OR-
public int GetPerimeter(int side1, int side2)
{
return DoubleSide(side1) + DoubleSide(side2);
}
private int DoubleSide(int side)
{
return side * 2;
}
Personalmente, prefiero el primer método, aunque técnicamente realiza más de una operación. Al mismo tiempo, también puede tener métodos con muchas líneas de código que son fáciles de leer y entender.
public void UpdateCustomer()
{
customer Customer = new Customer();
customer.Name = textboxName.Text;
customer.AddrLine1= textboxName.Text;
customer.AddrLine2 = textboxName.Text;
customer.OfficialName = textboxName.Text;
customer.Age = textboxName.Text;
customer.BirthDay = textboxName.Text;
customer.NickName = textboxName.Text;
customer.LastLocation = textboxName.Text;
customer.... = textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer.... = textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer.... = textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
customer....= textboxName.Text;
db.InsertOnCommit(customer)
db.SubmitChanges();
}
El ejemplo anterior es de aproximadamente 50 líneas, pero incluso podría ser de 200 líneas, y no haría ninguna diferencia. Cada asignación de propiedad en el objeto del cliente no agrega prácticamente ninguna complejidad, por lo que el método de 50 líneas permanece en el mismo nivel de complejidad que su método promedio de 4 líneas. De hecho, me atrevería a decir que tiene básicamente la misma legibilidad que el método a continuación:
public void UpdateCustomer()
{
customer Customer = new Customer();
customer.Name = textboxName.Text;
db.InsertOnCommit(customer)
db.SubmitChanges();
}
El método de 50 líneas probablemente podría lograrse en menos de 10 líneas mediante el uso de reflejo y expresión regular, repitiendo cada una de las propiedades en el Cliente y buscando un cuadro de texto que tenga un valor LIKE coincidente en su nombre. Obviamente, ese sería un ejemplo de código que es demasiado inteligente y recurre a hackes extravagantes para lograr un ideal estético. La conclusión es que la LoC es una métrica de complejidad / legibilidad extremadamente poco confiable. Todos ya saben esto (mi ejemplo de CRUD no es en absoluto infrecuente), y sin embargo, mientras la mayoría de las personas hablan de lo horrible que es la LoC para medir productividad, escuchamos constantemente sobre este LoC por reglas de método que se supone que miden la calidad del código. Realmente no puede ser en ambos sentidos.