Qual convenção de nomenclatura para arquivo C # que contém várias classes?


20

Nos projetos C #, frequentemente agrupamos classes pequenas e fortemente relacionadas no mesmo .csarquivo. Essa prática reduz o atrito de lidar com uma infinidade de arquivos que contêm quase nenhum código real. No entanto, existe uma prática estabelecida para nomear o arquivo que contém várias classes?


13
francamente prefiro um arquivo de classe um, mesmo para pequenas aulas
Felice Pollano

Você pode optar por nomeá-lo de acordo com o grupo em que essas classes fortemente relacionadas se enquadram.
V4Vendetta

Talvez essas classes sejam muito pequenas? Pessoalmente, apenas agrupo várias enumerações em um arquivo (às vezes com a classe, às vezes todas as enumerações juntas, dependendo do contexto).
precisa

@Felice: olhe o MSpec :)
Bryan Boettcher

Respostas:


18

Meu conselho: evite arquivos que contenham várias classes e arquivos de nomes == classes, mesmo que você queira dizer que há muitos arquivos. Tente organizá-los em pastas. Em casos muito especiais, você pode ter classes aninhadas. Nesse caso, faz sentido separar a classe principal e uma classe aninhada em arquivos diferentes com uma classe parcial. Nesse caso, eu uso a seguinte convenção de nomenclatura.

MyEnumerable.cs
MyEnumerable.MyEnumerator.cs

Provavelmente você também pode usar nomes de arquivos com várias partes no seu caso.


4
Mais uma ideia. Você pode agrupar vários arquivos .cs dentro do Visual Studio Project para que todos apareçam no mesmo nó na árvore (como arquivos .Designer.cs). Isso indicará que as classes pertencem firmemente.


4

Considere que, ao fazer uma pergunta sobre como nomear esses arquivos, você já identificou um cheiro de código problemático para você, e esse é um problema que não desaparece facilmente.

Independentemente do raciocínio, você descobrirá que é difícil escolher nomes sensíveis quando tiver mais de uma classe em um arquivo, porque, mesmo que os arquivos sejam relacionados de alguma forma, sempre haverá a tentação de introduzir algo que não se encaixa perfeitamente no nome do grupo que você atribui a um conjunto de classes.

A resposta curta, portanto, é que não há um padrão reconhecido ou estabelecido para nomear esses tipos de arquivos. Minha sugestão seria sentar-se com sua equipe, olhar para a organização do seu código e aplicar um pouco de esforço de refatoração para arrumar um pouco as coisas.

No entanto, para facilitar um pouco as coisas, eu perguntaria se as classes adicionais são aninhadas ou independentes. Se independentes, essas classes podem ser mais facilmente divididas em seus próprios arquivos, com cada arquivo nomeado para a única classe contida. Se aninhadas, poderão ser necessárias decisões adicionais sobre como essas classes devem ser organizadas, no entanto, as classes aninhadas podem não precisar ser removidas imediatamente e, portanto, os arquivos serão nomeados para a classe mais externa. No que diz respeito ao aninhamento, existem muitos argumentos contra, e alguns razoáveis ​​para aninhar em algumas circunstâncias, e meu conselho seria perguntar se o espaçamento de nome sensato e a criação de uma estrutura de código-fonte mais organizada podem ser a melhor maneira de enfrentar o problema.

Realisticamente, no entanto, você descobrirá que, no final da vida útil do seu projeto, você desejaria que todos os seus arquivos contivessem apenas uma única classe e uma boa estrutura de diretório / espaço para nome.

Felicidades,


3

Eu costumava ser tudo por ter várias classes em um arquivo, mas desde que comecei a trabalhar como programador (em vez de ficar sozinho), descobri que pode ser um pesadelo de manutenção com muitas classes em um único arquivo. Embora, reconhecidamente, o Visual Studio possa ajudar muito usando o F12 (vá para a definição).

O que comecei a fazer é usar uma convenção de nomenclatura da seguinte maneira: namespace.classname.cs Dessa maneira, sei exatamente o que há em cada arquivo e também fornece algum tipo de contexto geral do arquivo. Se a classe estiver no espaço para nome padrão, então eu vou em frente e apenas uso o classname.cs (semelhante ao Java).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.