As classes, enumerações e outras entidades devem ser colocadas em arquivos separados?

12

O líder da equipe da minha empresa \ arquiteto argumenta que um projeto em larga escala é mais fácil de entender se "entidades conectadas pela lógica" forem colocadas em um arquivo .cs.

Eu cito:

  • "Toda a estrutura da lógica, da interface e da classe pode ser vista em um só lugar, este é um argumento que não pode ser refutado. Para ver a mesma coisa, mas com vários arquivos, você precisa usar as ferramentas, classe diagrama, R # para navegação etc. "

  • "Seguindo a teoria pobre, posso gritar que um exército de arquivos separados é legal, mas quando se trata de fazer alterações no código existente, especialmente se você não foi um escritor desse código, é muito difícil entender muitos arquivos dispersos. Assim, nos fóruns, você pode escrever "um arquivo enum-one", mas na prática essa abordagem nunca deve ser usada "

  • "... Quanto à separação da base de código entre os desenvolvedores, atualmente não é um problema editar simultaneamente o mesmo arquivo. A mesclagem não é um problema."

Ouvi e li muitas vezes que precisamos criar um arquivo .cs por enum, classe e assim por diante, e essa é a melhor prática.

Mas não posso convencê-lo. Ele diz que não confia em nenhum programador conhecido como Jon Skeet. A propósito, aqui está a opinião de Skeet sobre este tópico: Onde é o melhor lugar para localizar tipos de enum?

O que você acha? Existe um problema real? Ou é uma questão de gosto e deve ser regulamentada pelo padrão de codificação da organização?

EngineerSpock
fonte
Você não pode ganhar todos, mesmo quando você joga o Skeet Card.
JeffO 18/03/2013
6
Para ser justo, a alegação de Jon Skeet à fama não é ser um excelente especialista em código, está disposto e é capaz de responder perguntas C # de maneira rápida e precisa (e ele literalmente escreveu o livro). E possivelmente nunca dorme, embora isso seja apenas um boato. Sua opinião sobre isso por si só não deve ser suficiente, e seu argumento de que não é forte. Isso não significa que ele esteja errado neste caso, estou apenas dizendo que seu veterano tem o direito de dizer "venha a mim com fatos e razões, não opiniões".
Pd #
2
Eu voto em uma classe por arquivo, e quaisquer enumerações ou interfaces relevantes apenas para essa classe devem estar dentro da classe, não apenas dentro do arquivo. Por outro lado, você deve seguir o padrão de codificação da empresa, por mais irracional que seja, porque isso faz parte da criação de um bom código para o seu trabalho .
Bobson 18/03/2013
2
Você poderia apontar que StyleCop como um plug-in Visual Studio tem avisos se houver> 1 classe por arquivo
Kevin

Respostas:

20

Existem algumas falhas no argumento do seu líder de equipe:

  1. Classes e enums bem projetadas devem ser usadas em qualquer lugar do seu projeto, não apenas onde possam fazer sentido logicamente.

  2. Classes e enumerações devidamente documentadas com comentários XML são muito autoexplicativas, apenas passando o mouse sobre o item que faz referência a ele.

  3. Você sempre pode chegar a uma definição de classe ou enum clicando com o botão direito do mouse na referência e selecionando "Ir para definição", para que realmente não importe onde você a coloca.

  4. Juntar objetos de uma maneira "lógica" é arbitrário (ou seja, você precisa pensar no que significa "lógica". Prefiro gastar esses ciclos de relógio realizando a programação).

A configuração de cada definição de objeto em seu próprio arquivo cria uma expectativa uniforme e disciplinada de organização e estrutura e não levanta questões como "por que isso está aqui?" É uma coisa muito agradável de se ter.

Se dois ou mais objetos estiverem logicamente relacionados, basta colocá-los em sua própria pasta no Project Explorer.

Robert Harvey
fonte
5
Em outra nota, o código mescla suck. Claro, você pode fazê-los, mas por que, se você não precisa?
Robert Harvey
4

Provavelmente, o líder da equipe cortou os dentes em uma época anterior, quando clicar com o botão direito do mouse e escolher "ir para a definição" não era uma opção. Sei que, quando estou no modo de desenvolvimento de pico pesado, aumentarei arquivos de classe bastante grandes até que eu permita que o novo afiador o conserte.

De qualquer forma, se você quiser levar a liderança da equipe à tarefa, pergunte a ele por que essas classes e enumerações não são classes e enumerações filho - não há razão para declara-las como entidades independentes, se são entidades verdadeiramente dependentes. Isso pode ajudá-lo a pensar um pouco sobre a fatwa.

Wyatt Barnett
fonte