LoC non è semplicemente una metrica valida. Invece, guarda a quanto fa un metodo. Un metodo dovrebbe generalmente fare una cosa. IMHO, a volte è ok per virare su 1 o 2 operazioni molto semplici. Ad esempio, calcolando il perimetro di un rettangolo:
Potrebbe essere:
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, preferisco il primo metodo, anche se tecnicamente esegue più di una operazione. Allo stesso tempo, puoi anche avere metodi con molte linee di codice che sono semplici da leggere e comprendere.
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();
}
L'esempio sopra riportato è di circa 50 righe, ma potrebbe anche essere di 200 righe e non farebbe alcuna differenza. Ogni assegnazione di proprietà sull'oggetto cliente non aggiunge praticamente alcuna complessità, quindi il metodo a 50 righe rimane allo stesso livello di complessità del metodo medio a 4 righe. In effetti, direi che ha praticamente la stessa leggibilità del metodo seguente:
public void UpdateCustomer()
{
customer Customer = new Customer();
customer.Name = textboxName.Text;
db.InsertOnCommit(customer)
db.SubmitChanges();
}
Il metodo a 50 linee potrebbe probabilmente essere raggiunto in meno di 10 righe tramite l'uso di reflection e regex, iterando su ciascuna delle proprietà in Customer e cercando una casella di testo che abbia un valore LIKE corrispondente nel suo nome. Ovviamente, questo sarebbe un esempio di codice che è troppo intelligente e ricorre a stravaganti hack per raggiungere un ideale estetico. La linea di fondo è che LoC è una metrica di complessità / leggibilità estremamente inaffidabile. Tutti lo sanno già (il mio esempio CRUD non è in alcun modo insolito), eppure la maggior parte delle persone parla di quanto orribile LoC sia alla misurazione produttività, sentiamo costantemente su questo LoC per le regole del metodo che dovrebbero misurare la qualità del codice. In realtà non può essere in entrambi i modi.