O LoC simplesmente não é uma métrica valiosa. Em vez disso, veja quanto um método faz. Um método geralmente deve fazer uma coisa. IMHO, às vezes é ok para abordar 1 ou 2 operações muito simples. Por exemplo, calculando o perímetro de um retângulo:
Pode ser:
public int GetPerimeter(int side1, int side2)
{
totalWidthLength = side1 * 2;
totalHeightLength = side2 * 2;
return totalWidthLength + totalHeightLength;
}
-OU -
public int GetPerimeter(int side1, int side2)
{
return DoubleSide(side1) + DoubleSide(side2);
}
private int DoubleSide(int side)
{
return side * 2;
}
Pessoalmente, prefiro o primeiro método, embora tecnicamente realize mais de uma operação. Ao mesmo tempo, você também pode ter métodos com muitas linhas de código que são simples de ler e 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();
}
O exemplo acima é de cerca de 50 linhas, mas pode até ser de 200 linhas e não faria diferença. Cada atribuição de propriedade no objeto de cliente não adiciona praticamente nenhuma complexidade, portanto, o método de 50 linhas permanece no mesmo nível de complexidade do seu método de 4 linhas médio. Na verdade, eu diria que tem basicamente a mesma legibilidade do método abaixo:
public void UpdateCustomer()
{
customer Customer = new Customer();
customer.Name = textboxName.Text;
db.InsertOnCommit(customer)
db.SubmitChanges();
}
O método de 50 linhas provavelmente poderia ser alcançado em menos de 10 linhas por meio do uso de reflexão e regex, iterando sobre cada uma das propriedades no Customer e procurando por uma caixa de texto que tenha um valor LIKE correspondente em seu nome. Obviamente, isso seria um exemplo de código que é muito inteligente e recorre a hacks excêntricos para obter um ideal astético. O resultado é que o LoC é uma métrica de complexidade / legibilidade extremamente confiável. Todos já sabem disso (meu exemplo de CRUD não é incomum), e enquanto a maioria das pessoas fala sobre como o LoC é medíocre produtividade, estamos constantemente ouvindo sobre este LoC por regras de método que devem medir a qualidade do código. Realmente não pode ser os dois caminhos.