Número de classes em um espaço para nome - cheiro de código?

11

Eu tenho uma biblioteca c # usada por vários executáveis. Existem apenas alguns namespaces na biblioteca, e acabei de perceber que um dos namespaces possui algumas classes. Sempre evitei ter muitas classes em um único espaço para nome por causa da categorização e, porque subconscientemente, acho "mais bonito" ter uma hierarquia mais profunda.

Minha pergunta é: alguém mais considera um "cheiro de código" quando um espaço para nome tem muitas classes - mesmo que as classes se relacionem? Você se esforçaria muito para encontrar nuances nas aulas que permitissem a subcategorização?

Tim Claason
fonte
8
Se as classes pertencerem ao referido espaço para nome no. O design é subjetivo por sua própria natureza, por isso é difícil dizer e é mais uma questão de preferência, como você já identificou.
Chris
O que a StyleCop diz é a lei. Aposto que não vai gostar.
Job
2
Defina "alguns". 10? 100? 1000?
Eric King

Respostas:

7

Não necessariamente. Se todas as classes realmente pertencem à categoria definida pelo espaço para nome, tudo bem.

O que você pode fazer é examinar as classes e refletir sobre a possibilidade de mesclar algumas delas. Pode haver pequenos grupos dessas classes que suportam a funcionalidade "família", mas foram implementados separadamente por alguns motivos históricos. Agora, quando tiver decorrido tempo suficiente, poderá ser possível uma melhor composição.


fonte
6

Você deve evitar muitos espaços para nome, pois isso torna a biblioteca muito mais difícil de usar e navegar pelo programador. Além disso, com muitos espaços para nome, pode ser um desafio para o designer fornecer nomes precisos para cada espaço para nome e também decidir em qual espaço para nome uma classe específica deve pertencer.

O caminho mais simples a seguir é colocar todas as classes primárias em um único espaço para nome, colocando todas as classes de cenário avançadas em subespaços; O .NET Framework faz isso o tempo todo, consulte System.Collectionse System.Collections.Specializedpara obter bons exemplos dessa prática.

Com apenas um ou dois namespaces de primeiro nível, seu código se tornará muito mais fácil de navegar, com suas classes avançadas ou especializadas ocultas até que o programador esteja pronto para descobrir isso.

Ed James
fonte
3

Desde que eles pertençam um ao outro e se relacionem, não há problema em ter muitas classes em um espaço para nome.

Se uma classe pertence ou não a seu próprio espaço para nome separado é uma questão de preferência pessoal.

O que parece mais natural?

Parsers.XML.XmlParser.cs
Parsers.XmlParser.cs

Depende inteiramente de como você deseja ver e chamar seu código.

Pessoalmente, prefiro espaços para nome separados apenas quando sei que haverá mais de uma classe pertencente a ele.


fonte
0

Isto é bom. O principal motivo para ter espaços de nomes é evitar colisões de nomes e somente depois disso devemos pensar no escopo lógico, que é mais uma questão de escolha pessoal do que de regra. É claro que algumas regras sensatas são bem-vindas. Ninguém deseja rolar pelas classes 3k ~ 4k em um espaço para nome.

Um bom exemplo é o namespace std na Biblioteca Padrão C ++, que permite separar seus próprios algoritmos dos padrões.

Andrey Taptunov
fonte
-1. A colisão de nomes é importante, mas o agrupamento conceitual de classes também é importante.
umlcat