Nombre de classes dans un espace de noms - Odeur de code?


11

J'ai une bibliothèque C # utilisée par plusieurs exécutables. Il n'y a que quelques espaces de noms dans la bibliothèque, et je viens de remarquer que l'un des espaces de noms contient plusieurs classes. J'ai toujours évité d'avoir trop de classes dans un seul espace de noms à cause de la catégorisation, et parce qu'inconsciemment, je pense qu'il semble "plus joli" d'avoir une hiérarchie plus profonde des espaces de noms.

Ma question est: quelqu'un d'autre le considère-t-il comme une "odeur de code" lorsqu'un espace de noms a plusieurs classes - même si les classes sont liées les unes aux autres? Souhaitez-vous faire beaucoup d'efforts pour trouver des nuances dans les classes qui permettent la sous-catégorisation?


8
Si les classes appartiennent à cet espace de noms, pas. Le design est subjectif par sa nature même, c'est difficile à dire et c'est plus une question de préférence que vous l'avez déjà identifié.
Chris

Whatecer StyleCop dit que c'est la loi. Je parie que ça ne lui plaira pas.
Job

2
Définissez "plusieurs". dix? 100? 1000?
Eric King

Réponses:


7

Pas nécessairement. Si toutes les classes appartiennent en effet à la catégorie définie par l'espace de noms, c'est bien alors.

Ce que vous pouvez faire, c'est regarder les classes et réfléchir à la possibilité de fusionner certaines d'entre elles. Il se pourrait bien que de petits groupes de ces classes prennent en charge la fonctionnalité "famille" mais ont été implémentés séparément pour certaines raisons historiques. Maintenant, lorsque suffisamment de temps s'est écoulé, une meilleure composition pourrait être possible.


6

Vous devez éviter d'avoir trop d'espaces de noms car cela rend une bibliothèque beaucoup plus difficile à utiliser et à naviguer pour le programmeur. En outre, avec de nombreux espaces de noms, il peut devenir difficile pour le concepteur de fournir des noms précis pour chaque espace de noms et également de décider à quel espace de noms une classe particulière doit appartenir.

La façon la plus simple de procéder consiste à placer toutes les classes primaires dans un seul espace de noms, en regroupant toutes les classes de scénario avancées dans des sous-espaces de noms; Le .NET Framework le fait tout le temps, consultez le System.Collectionset System.Collections.Specializedpour de bons exemples de cette pratique.

Avec seulement un ou deux espaces de noms de premier niveau, votre code deviendra beaucoup plus facile à naviguer, avec vos classes avancées ou spécialisées cachées jusqu'à ce que le programmeur soit prêt à les découvrir.


3

Tant qu'ils sont liés et liés les uns aux autres, il n'y a pas de problème avec trop de classes dans un espace de noms.

Que ce soit ou non une classe appartient à son propre distinct espace de noms est une question de préférence personnelle.

Quoi de plus naturel?

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

Cela dépend entièrement de la façon dont vous aimez voir et invoquer votre code.

Personnellement, je préfère des espaces de noms séparés uniquement lorsque je sais qu'il y aura plus d'une seule classe qui lui appartiendra.


0

C'est bon. La principale raison d'avoir des espaces de noms est d'éviter les collisions de noms et ce n'est qu'après cela que nous devrions penser à la portée logique, qui relève plus du choix personnel que de la règle. Bien sûr, certaines règles sensées sont les bienvenues. Personne ne veut faire défiler les classes 3k ~ 4k dans un seul espace de noms.

Un bon exemple est l' espace de noms std dans la bibliothèque standard C ++ qui vous permet de séparer vos propres algorithmes des algorithmes standard.


-1. La collision de noms est importante, mais le regroupement conceptuel des classes l'est également.
umlcat
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.