Escolar Documentos
Profissional Documentos
Cultura Documentos
1. NOMENCLATURA C#
1.1.
Variveis Locais
1.2.
Variveis de Classe
18/8/2015
Pgina 1 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
1.3.
Parmetros de Mtodos
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
1.4.
Constantes
18/8/2015
Pgina 3 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
1.5.
Classes
Na formao do nome da classe, evitar o uso de prefixos tais como cCliente, CCliente etc;
prefira Cliente.
No caso da classe for um controller devemos sempre deixar o aps o nome o sufixo
Controller.
Especificamente para o caso onde o identificador comea com a letra I, pode haver alguma
confuso com a nomenclatura adotada para a Interface. Porm deve-se ressaltar que na
nomenclatura de interfaces, a primeira letra I maiscula seguida de uma segunda letra
tambm em maiscula; diferentemente da declarao de classes, onde temos apenas o
primeiro caractere do identificador em maisculo.
CODIGO_LINGUA = BRA;
CODIGO_MOEDA = BRL;
CODIGO_MERCADORIA = 001;
CODIGO_MOEDA = BRL;
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
#endregion
public class PrecoController
{
1.6.
Propriedades
18/8/2015
Pgina 5 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
1.7.
Exceo
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
1.8.
Mtodos
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
1.9.
Interfaces
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
1.10. Enumeradores
Formato (regra da nomenclatura)
<Identificador>[<Complemento>]
Onde:
<Identificador> : Os identificadores utilizam regra Pascal Case, ou seja, a primeira
letra do identificador deve estar em maiscula seguida das demais letras em minscula.
18/8/2015
Pgina 9 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
1.11. Namespaces
Formato (regra da nomenclatura)
<CompanyName><Type><ApplicationName>[<Package>[<Feature>]]
Onde:
<CompanyName> : O CompanyName utiliza regra Pascal Case, ou seja, a primeira
letra do identificador deve estar em maiscula seguida das demais letras em minscula.
<Type> : Tipo do namespace (Arquitetura ou Aplicao).
<ApplicationName> : Identificao do nome da aplicao (ou class library).
ApplicationName deve utilizar regra Pascal Case, ou seja, a primeira letra do
identificador deve estar em maiscula seguida das demais letras em minscula.
<Package> : Identifica um grupo de funcionalidades. Package utiliza regra Pascal
Case, ou seja, a primeira letra do identificador deve estar em maiscula seguida das
demais letras em minscula.
18/8/2015
Pgina 10 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
<Feature> : Identifica uma funcionalidade de aplicao (ou class library). Feature utiliza
regra Pascal Case, ou seja, a primeira letra do identificador deve estar em maiscula
seguida das demais letras em minscula.
Outras informaes
Para uso no exemplo abaixo temos:
CompanyName = Belagricola
Type = Arquitetura
ApplicationName = Cockpit
Elemento
Label
HyperLink
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
txt
opt
chk
pnl
img
dg
btn
ddl
cbo
msk
grp
uc
tela
controle
Texto Box
Radio Button
Check Box
Panel
Image
DataGrid
Button
DropDown List box
Combo Box
Masked Text Box
Group Box
User Control
ITela
IControle
(*) Os nomes dos controles devem ser gerados usando a notao hngara com os prefixos
conforme definidos na tabela acima.
Exemplos de uso (incorreto)
IDTMUN, IdtMun
18/8/2015
Pgina 12 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
2. REGRAS DE CODIFICAO
2.1.
Utilizao de constantes
Descrio
No utilize nmeros e strings hard-coded, prefira o uso de constantes.
Motivo
Como os valores desejados esto definidos em uma constante, torna-se mais fcil a manuteno
do cdigo caso seja necessrio alterar tais valores.
Exemplos de uso (correto)
switch(tipoEmail)
{
case EMAIL_HTML:
...
break;
case EMAIL_TEXTO:
...
break;
}
...
if (produto.Moeda == CODIGO_REAL)
{
...
}
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
...
if (produto.Moeda == 21)
{
...
}
2.2.
Regies de cdigo
Descrio
Utilize sempre o bloco region para organizar o cdigo de uma classe.
Utilizar as seguintes regies
- Constantes para organizar as constantes;
- Atributos para organizar os atributos;
- Construtores para organizar os construtores;
- Mtodos Privados para organizar os mtodos privados;
- Mtodos Pblicos para organizar os mtodos pblicos;
- Mtodos Privados Estticos para organizar os mtodos privados e estticos;
- Mtodos Pblicos Estticos para organizar os mtodos pblicos e estticos;
Outras informaes
Caso o programador deseje utilizar um comentrio em uma determinada etapa de seu cdigo ele
poder realizar utilizando // acima do comando desejado.
Todos os comentrios devem ser feitos em Portugus.
Exemplos de uso (correto)
#region Atributos
private string _nome = string.Empty;
#endregion
#region Constantes
private const string CODIGO_LINGUA = "BRA";
#endregion
#region Construtores
18/8/2015
Pgina 14 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
public Fornecedor()
{
}
#endregion
#region Mtodos Privados
private bool Incluir(string cpf)
{
return true;
}
#endregion
#region Mtodos Pblicos
public bool Persistir(string cpf)
{
return true;
}
#endregion
#region Mtodos Privados Estticos
private static bool Inserir()
{
return true;
}
#endregion
#region Mtodos Pblicos Estticos
public static bool Persistir(string cpf)
{
return true;
}
#endregion
18/8/2015
Pgina 15 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
2.3.
Comentrios
Descrio
Utilize sempre o bloco summary antes de uma classe ou um mtodo publico. O bloco summary
deve descrever o objetivo da classe ou mtodo e, utilizando a tag param quando necessrio, os
parmetros de entrada que possui.
Todavia, caso o programador no deseje adicionar um resumo a uma rotina especfica ele pode
utilizar a forma /* ... */ para realizar o comentrio desejado.
Motivo
Utilizando a tag de summary, o Visual Studio .NET interpreta internamente tal comentrio como
descrio da classe/mtodo.
Outras informaes
Caso o programador deseje utilizar um comentrio em uma determinada etapa de seu cdigo ele
poder realizar utilizando // acima do comando desejado.
Todos os comentrios devem ser feitos em Portugus.
Exemplos de uso (correto)
/// <summary>
/// Descrio Descrio Descrio Descrio Descrio Descrio
/// </summary>
/// <param name="parametro1">Descricao</param>
/// <param name="parametro2">Descricao</param>
/// <returns>Descricao</returns>
private bool MyClass(string parametro1, string parametro2)
{
...
...
// Valida a existncia de um registro no array
if (myArray.Length > 0)
{
...
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
<summary>
Valida a existncia de um registro no array
</summary>
<returns></returns>
if (myArray.Length > 0)
{
...
2.4.
Comentrios II
Descrio
No escreva comentrios para cada linha de cdigo ou para cada declarao de varivel.
Motivo
Escreva comentrios apenas onde necessrio, de tal forma que o cdigo no fique poludo e de
difcil leitura.
18/8/2015
Pgina 17 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
2.5.
Tabulao e espaamento
Descrio
Utilize sempre <TAB> (de 4 espaos) para alinhamento, nunca utilize <ESPAO> para definir
coluneamento.
Motivo
Utilizando <TAB> o programador mantm um padro para o coluneamento, tornando o cdigo mais
legvel e agradvel, principalmente a quem prestar manuteno.
Exemplos de uso (correto)
private void MyClass()
{
if (...)
{
for (...)
{
//codigo ...
}
}
}
18/8/2015
Pgina 18 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
2.6.
Descrio
Evite colocar o marcador de incio de bloco na mesma linha do comando (if, for, while, etc.). Nestas
construes, coloque o marcador em linha separada.
Motivo
O uso do marcador de incio de bloco em linhas separadas aumenta consideravelmente a
legibilidade do programa.
Exemplos de uso (correto)
private void MyClass()
{
if (...)
{
for (...)
{
//codigo ...
}
}
}
18/8/2015
Pgina 19 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
2.7.
Descrio
Os blocos subseqentes ao comando if sempre devem sempre possuir os marcadores de bloco.
Motivo
Evitar erros de codificao por erros de compreenso durante a digitao/leitura do cdigo.
Exemplos de uso (correto)
private void MyClass()
{
if (...)
{
for (...)
{
//codigo ...
}
}
}
18/8/2015
Pgina 20 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
2.8.
Tamanho de arquivos
Descrio
Evite a construo de arquivos fontes muito grandes. Se um arquivo de programa fonte estiver com
mais de 400 linhas, provavelmente ela no est bem estruturada.
Motivo
Arquivos muito grandes indicam que a classe nela contida tem muita lgica implementada e
provavelmente no est desenhada de forma a hierarquizar e estruturar os componentes de forma
organizada. Nestas situaes h fortes indcios de que a modelagem de objetos aplicada est
degenerada ou compondo mais de uma entidade numa s.
2.9.
Tamanho de mtodos
Descrio
Evite a construo de mtodos com mais de 30 linhas de cdigo.
Motivo
Mtodos com muitas linhas de cdigo tm sua legibilidade comprometida e provavelmente o ndice
de reutilizao de cdigo est comprometido.
18/8/2015
Pgina 21 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
18/8/2015
Pgina 22 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
{
...
break
}
}
18/8/2015
Pgina 24 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
18/8/2015
Pgina 25 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
18/8/2015
Pgina 26 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
3. BOAS PRTICAS
3.1.
Descrio
Existem alguns sufixos que devem ter sua utilizao evitada por serem usados para outro
propsito. Desta forma, deve-se evitar o uso dos seguintes sufixos:
- Attribute
- Collection
- Dictionary
- EventArgs
- EventHandler
- Exception
- Queue
- Stack
- Stream
- Delegate
- Enum
- Flags
- Impl.
Motivo
Os sufixos listados acima j so usados por tipos bsicos do framework .net e desta forma o seu
uso pode causar confuso aos desenvolvedores.
18/8/2015
Pgina 27 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
3.2.
Variveis
Descrio
Sempre evite a declarao de mais de uma varivel do mesmo tipo em uma s linha. Sempre que
possvel, tabular um bloco lgico.
Sempre que possvel prefira o tipo implcito var como ele deixamos o cdigo mais limpo.
Motivo
Isso facilita a visualizao das variveis e seus respectivos tipos bem como seus valores iniciais.
Tambm evita que ocorra uma condio imprevista por falta de um contedo vlido atribudo
varivel.
Exemplos de uso
string nome;
string sexo;
int
idade;
string usuario;
var sobreNome;
3.3.
Espaamento
Descrio
Sempre utilize um espao simples para a separao de operadores e vrgulas/ponto e vrgula em
uma mesma instruo.
Motivo
Utilizando esta prtica, a interpretao da instruo fica mais simples e legvel.
Exemplos de uso
for(var i = 0; i < total; i++)
{
BuscaNome(param1, param2);
...
int total = valor1 + valor2;
18/8/2015
Pgina 28 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
18/8/2015
Pgina 29 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
3.4.
Abreviaes
Descrio
Evite o uso de abreviaes na formao de nomes, salvo quando sejam abreviaes bastante
conhecidas. Por exemplo: UI para User-Interface.
Motivo
Evitando a utilizao de abreviaes, o nome formado tem seu verdadeiro significado, evitando
causar dvidas durante a interpretao de sua funcionalidade.
Exemplos de uso
private bool ObtemCredito()
{
...
...
string NomeCliente = Joao;
private const string TIPO_CREDITO = 001;
3.5.
Descrio
Evite o uso de nomes que requerem diferenciao entre maisculas e minsculas, ou seja, no
criar elementos cujos nomes, se convertidos todos os caracteres para maisculas tornam-se
iguais. O mesmo vale para a criao de namespaces.
Motivo
Algumas linguagens no fazem diferenciao entre letras maisculas e minsculas e isto pode
dificultar a reutilizao de componentes entre estes ambientes.
Exemplo
void Analyser()
18/8/2015
Pgina 30 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
{
...
...
}
void analyser()
{
...
...
}
18/8/2015
Pgina 31 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
3.6.
Descrio
Evite a codificao de mais de um comando na mesma linha.
Motivo
Este tipo de construo dificulta a legibilidade do programa, sem trazer qualquer outro benefcio.
Exemplo (Correto)
userAge++;
userName += CONST_VALUE;
Exemplo (Incorreto)
userAge++; userName = += CONST_VALUE ;
18/8/2015
Pgina 32 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
3.7.
Especializao de mtodos
Descrio
Ao definir a funcionalidade de um mtodo, cuidar para que o mesmo realize apenas uma tarefa.
Evite a construo de mtodos que fazem mais de uma atividade.
Motivo
Ao construir mtodos que realizam uma nica tarefa, mesmo que ela seja muito simples, estamos
implicitamente promovendo a reusabilidade do mesmo.
Exemplo (Correto)
public int SendMail(string address, string msg);
public int SendSMS(string address, string msg);
Exemplo (Incorreto)
public int SendMailSMS(string address, string msg, int tipo);
18/8/2015
Pgina 33 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
3.8.
Descrio
Ao definir a assinatura de um mtodo, assegurar que todos os parmetros definidos em sua lista
sejam referenciados pela lgica interna do mtodo.
Motivo
Parmetros no utilizados internamente implicam em consumo desnecessrio de memria e CPU,
consequentemente degradando a performance do programa.
18/8/2015
Pgina 34 de 35
Arquitetura de Sistemas
Padro de Nomenclatura e Codificao .NET / C#
4. GLOSSRIO
A seguir temos a descrio de alguns dos termos utilizados neste documento.
Pascal Case: Termo normalmente usado para definir uma prtica de nomear identificadores. A
regra consiste em escrever palavras compostas ou frases onde as palavras so concatenadas
sem espao e cada palavra tem a primeira letra em maiscula e as demais em minscula.
Camel Case: Termo normalmente usado para definir uma prtica de nomear identificadores. A
regra consiste em escrever palavras compostas ou frases onde as palavras so concatenadas
sem espao e cada palavra (com a exceo da primeira) tem a primeira letra em maiscula e as
demais em minscula. A primeira palavra deve ter todas as letras em minsculas.
Notao Hngara: Termo normalmente usado para definir a conveno usada para nomear
objetos utilizando seu tipo como prefixo do nome. Nesta notao, os nomes de variveis comeam
com uma ou mais letras cujo mnemnico representa o tipo da varivel seguido de outra palavra
usada para identificar a funo da mesma.
18/8/2015
Pgina 35 de 35