As regras abaixo são validas para todos os níveis de acesso (
private
,protected
,internal
epublic
).
-
Pascal Case: DoItNow
-
Nomes devem representar a ação que está sendo executada.
-
Tente quebrar o comportamento do método de maneira que o fluxo do algoritmo não fique grande e possa ser lido de forma fluída e contínua, sem a necessidade de realizar saltos no arquivo de código fonte. Evite separar o comportamento de um método em blocos separados por linhas em branco. Tente extrair o comportamento destes blocos para outros métodos privados e dê nomes significativos para estes.
-
Ao utilizar coleções em retornos ou parâmetros defina-os como IEnumerable sempre que possível.
Ruim:
var transactions = this.GetTransactions();
public IList<Transaction> GetTransactions()
{
//do anything that returns IList<Transaction> at the end...
}
var clients = this.GetClients();
public List<Client> GetClients()
{
//do anything that returns List<Client> at the end...
}
Bom:
var transactions = this.GetTransactions();
public IEnumerable<Transaction> GetTransactions()
{
//do anything that returns IEnumerable<Transaction> at the end...
}
var clients = this.GetClients();
public IEnumerable<Client> GetClients()
{
//do anything that returns IEnumerable<Client> at the end...
}
var clientsList = clients.ToList();
-
Sempre valide seus parâmetros de métodos públicos para evitar side effects em lugares indesejados.
Ruim
public void Foo(object someParameter) { this.Bar(someParameter.SomeField); }
Bom
public void Foo(object someParameter) { if(someParameter == null) { throw new ArgumentNullException(nameof(someParameter)); } this.Bar(someParameter.SomeField); }
-
Para verificações de parâmetros em construtores, utilize o operador null coalescing
public class Foo { private object someField; public Foo(object someParameter) { this.someField = someParameter ?? throw new ArgumentNullException(nameof(someParameter)); } }