Luiz,
Boa pergunta! Eu fui pesquisar para não falar besteira e achei um comentário muito interessante:
==========================================================
Qual a diferença entre else e elseif?
O else não tem condição a verificar e é usado no final/depois de uma série de if / elseif, como "caso geral".
O elseif, à semelhança do if, usa-se em casos onde é necessário verificar a autenticidade de uma condição. Assim em vez de multiplos if, usa-se n elseif, e no final o caso geral dentro do else.
https://pt.stackoverflow.com/questions/57791/qual-a-diferen%C3%A7a-entre-else-e-elseif
==========================================================
Então eu penso assim:
- Se você usar um IF dentro de um ELSE, estará ISOLANDO um caso no IF, pois o ELSE deste NÃO faz verificação e depois você monta um outro conjunto de verificações. Pode ser últi em casos bastante específicos.
Quanto as "boas práticas", eu estou fazendo agora uma formação completa sobre o assunto, até gostaria de fazer mais formações avançadas assim... recomendo:
==========================================================
Boas práticas em C#
Aprenda como aplicar boas práticas como SOLID, refatoração e design patterns em C#.
https://cursos.alura.com.br/formacao-boas-praticas-c-sharp
==========================================================
Mas para responder sua pergunta este LINK do José Carlos Macoratti foca direto no caso do "IF", por favor, leia:
==========================================================
C# - Boas Práticas : Aprendendo com maus exemplos - I
...
Criando o projeto exemplo : uma classe que cheira mal
Então veja o código da classe abaixo, e, tente entender qual o propósito dessa classe:
class Class1
{
public decimal Calcular(decimal valor, int tipo, int anos)
{
decimal resultado = 0;
decimal desc = (anos > 5) ? (decimal)5 / 100 : (decimal)anos / 100;
if (tipo == 1)
{
resultado = valor;
}
else if (tipo == 2)
{
resultado = (valor - (0.1m * valor)) - desc * (valor - (0.1m * valor));
}
else if (tipo == 3)
{
resultado = (0.7m * valor) - desc * (0.7m * valor);
}
else if (tipo == 4)
{
resultado = (valor - (0.5m * valor)) - desc * (valor - (0.5m * valor));
}
return resultado;
}
}
Esse é um tipo de código que estraga o dia de qualquer bom desenvolvedor.
... CONTINUA ...
https://macoratti.net/16/08/c_bpme1.htm
==========================================================
Como eu trabalhei com MUITO código "macarronada" na minha vida profissional eu não acho tão problemático, mas o CORRETO é evitar muitos "IFs" aninhados ou concatenados para que o código fique mais limpo (fácil de ler e fazer manutenção).
[]'S,
Fabio I.