ideias estao em acordo com os principios do XP e do DDD. Solution A solution pode agrupar uma serie de projetos / programas que sao parte de um mesmo sistema, por isso de um nome para a solution condizente com a metafora do sistema. A ideia expressa pela solution deveria ser compartilhada pelos seus projetos. Exemplo: ServiceDesk Projetos Use a solution como base ou prefixo para o nome dos projetos, e coloque seu objetivo e/ou ambiente como sufixo. Se o seu projeto for dividido em camadas fisicas, como Core, DAL/Data, Domain, GUI use esses nomes para identificar a camada a que pertence o projeto. Exemplo: ServiceDesk.Web Arquivos Salvo raras excecoes, cada arquivo.cs deve ter apenas uma classe, e o nome do arquivo deve ser o nome desta classe. Uma excecao sao os arquivos de partial classes, esses devem ter um sufixo que identifiquem o proposito do arquivo ou o porque dele estar separado. Por exemplo designer ou generated Exmeplos: Default.cs Default.design.cs Porque: isso e consistente com as praticas da Microsoft no source do proprio .net. Arquivos sao ordenados alfabeticamente pelo SO, e isso ajuda arquivos de classes parciais a permanecerem adjacentes. Namespaces Use PascalCase para nomear os namespaces. Use uma estrutura clara e bem definida. Exemplo: NomeDaEmpresa.NomeDoProjeto.NomeDaCamada.NomeDoModulo.NomeDoComponente BBI.ServiceDesk.Web.Data.Services.Repository Porque: e consistente com as praticas da Microsoft e mantem uma boa organizacao da sua base de codigo. Classes Use PascalCase para nomear classes. Use substantivos ou predicados nominais em caso de palavras compostas. Nao use verbos. Exemplo: Funcionario, GrupoDeFuncionario, ProdutoComposto Porque: classes sao tipos de objetos, mini programas, devem expressar um conceito e nao uma acao. Um conceito e melhor expresso por substantivos e adjetivos do que por verbos. Isso e consistente com as praticas da Microsoft e mais facil de ler. Interfaces Use PascalCase para nomear interfaces, mas prefixe as mesmas com I. Isso ajuda a diferenciar interfaces de classes abstratas ou outros tipos de dados, ajuda a identificar o que as classes que as implementam fazem, e e uma pratica comum do mercado desde a epoca do COM/COM+. Use substantivos, predicados nominais ou adjetivos/adverbios para nomear interfaces. Exemplos: IEnumerable, IList, IHierarchyData, IEntity Porque: Isso e consistente com os padroes da Microsoft e do COM/COM+, alem disso interfaces podem ser usadas para decorar classes, como flags, ou usadas como atributos. Por issp interfaces podem ser nomeadas com adjetivos ou adverbios, pois elas modificam ou segregam comportamento de outras classes. Interfaces sao a base da abstracao e da segregacao de responsabilidade. Sao contratos entre duas partes, ou pontos de encaixe entre componentes. Programe orientado a interfaces e nao a implementacao. Ordem dos elementos Declare todas as variaveis membro no topo da classe, com as estaticas acima de todas. Utilize a ordem: Membros/Fileds privadas estaticas publicas estaticas (evite-os a todo custo) privadas de instancia publicas de instancia (evite-os, transforme-os em propriedades sempre que possivel) propriedades protegidas propriedades publicas de instancia Metodos (na ordem do mais generico/abstrato para o mais especifico, dos metodos que chamam outros para os chamados) Construtores e Destrutores Factory methods publicos de classes (sao construtores especializados) Metodos publicos de classe Metodos