Non.
J'ai essayé les deux méthodes sur des petits et grands projets, avec un seul (moi) et une équipe de développeurs.
J'ai trouvé que la voie la plus simple et la plus productive était d'avoir un seul espace de nom par projet et toutes les classes vont dans cet espace de nom. Vous êtes ensuite libre de placer les fichiers de classe dans les dossiers de projet de votre choix. Il n'y a pas à s'embêter à ajouter des déclarations d'utilisation en haut des fichiers tout le temps puisqu'il n'y a qu'un seul espace de nom.
Il est important d'organiser les fichiers sources dans des dossiers et, à mon avis, c'est tout ce à quoi les dossiers devraient servir. Exiger que ces dossiers correspondent également à des espaces de noms n'est pas nécessaire, crée plus de travail, et j'ai trouvé que cela était en fait nuisible à l'organisation parce que la charge supplémentaire encourage la désorganisation.
Prenez cet avertissement de FxCop par exemple :
CA1020 : Éviter les espaces de noms avec peu de types
cause : Un espace de noms autre que l'espace de noms global contient moins de cinq types. https://msdn.microsoft.com/en-gb/library/ms182130.aspx
Cet avertissement encourage le déversement de nouveaux fichiers dans un dossier générique Project.General, ou même dans la racine du projet jusqu'à ce que vous ayez quatre classes similaires pour justifier la création d'un nouveau dossier. Cela arrivera-t-il un jour ?
Recherche de fichiers
La réponse acceptée est la suivante : "Les classes seront plus faciles à trouver et cela seul devrait être une raison suffisante".
Je pense que la réponse fait référence au fait d'avoir plusieurs espaces de noms dans un projet qui ne correspondent pas à la structure des dossiers, plutôt que ce que je suggère, à savoir un projet avec un seul espace de noms.
Dans tous les cas, même si vous ne pouvez pas déterminer le dossier dans lequel se trouve un fichier de classe à partir de l'espace de noms, vous pouvez le trouver en utilisant la fonction "Go To Definition" ou la boîte de recherche de l'explorateur de solutions dans Visual Studio. De plus, ce n'est pas vraiment un gros problème à mon avis. Je ne consacre même pas 0,1% de mon temps de développement au problème de la recherche de fichiers pour justifier son optimisation.
Conflits de noms
Bien sûr, la création de plusieurs espaces de noms permet au projet d'avoir deux classes avec le même nom. Mais est-ce vraiment une bonne chose ? Ne serait-il pas plus simple d'interdire cette possibilité ? Autoriser deux classes avec le même nom crée une situation plus complexe où 90% du temps les choses fonctionnent d'une certaine manière et puis soudainement vous découvrez que vous avez un cas spécial. Disons que vous avez deux classes Rectangle définies dans des espaces de noms distincts :
- classe Project1.Image.Rectangle
- classe Project1.Window.Rectangle
Il est possible de se heurter au fait qu'un fichier source doit inclure les deux espaces de noms. Vous devez alors écrire l'espace de nom complet partout dans ce fichier :
var rectangle = new Project1.Window.Rectangle();
Ou de s'amuser avec une déclaration d'utilisation méchante :
using Rectangle = Project1.Window.Rectangle;
Avec un seul espace de nom dans votre projet, vous êtes obligé de trouver des noms différents, et je dirais plus descriptifs, comme celui-ci :
- classe Project1.ImageRectangle
- classe Project1.WindowRectangle
Et l'utilisation est la même partout, vous n'avez pas à gérer un cas particulier lorsqu'un fichier utilise les deux types.
utilisation des déclarations
using Project1.General;
using Project1.Image;
using Project1.Window;
using Project1.Window.Controls;
using Project1.Shapes;
using Project1.Input;
using Project1.Data;
vs
using Project1;
La facilité de ne pas avoir à ajouter des espaces de noms tout le temps en écrivant du code. Ce n'est pas vraiment le temps que cela prend, c'est la rupture du flux de travail et le fait de devoir remplir des fichiers avec beaucoup d'instructions d'utilisation - pour quoi faire ? Est-ce que cela en vaut la peine ?
Modification de la structure des dossiers du projet
Si les dossiers sont mappés aux espaces de noms, le chemin du dossier du projet est effectivement codé en dur dans chaque fichier source. Cela signifie que tout renommage ou déplacement d'un fichier ou d'un dossier dans le projet exige que le contenu réel du fichier soit modifié. Il s'agit à la fois de la déclaration de l'espace de nom des fichiers de ce dossier et des instructions d'utilisation dans un grand nombre d'autres fichiers qui font référence aux classes de ce dossier. Bien que les modifications elles-mêmes soient triviales avec les outils, il en résulte généralement un gros commit composé de nombreux fichiers dont les classes n'ont même pas changé.
Avec un seul espace de nom dans le projet, vous pouvez modifier la structure des dossiers du projet comme vous le souhaitez sans que les fichiers sources eux-mêmes soient modifiés.
Visual Studio associe automatiquement l'espace de nom d'un nouveau fichier au dossier du projet dans lequel il est créé.
C'est regrettable, mais je trouve que la correction de l'espace de noms est moins pénible que le fait de s'occuper d'eux. De plus, j'ai pris l'habitude de copier-coller un fichier existant plutôt que d'utiliser Ajouter->Nouveau.
Intellisense et navigateur d'objets
Le plus grand avantage, à mon avis, de l'utilisation de plusieurs espaces de noms dans les grands projets est d'avoir une organisation supplémentaire lors de la visualisation des classes dans tout outil qui affiche les classes dans une hiérarchie d'espaces de noms. Même la documentation. Évidemment, le fait de n'avoir qu'un seul espace de noms dans le projet fait que toutes les classes sont affichées dans une seule liste plutôt que d'être divisées en catégories. Cependant, personnellement, je n'ai jamais été bloqué ou retardé à cause d'un manque de cela, donc je ne trouve pas que ce soit un avantage suffisamment important pour justifier plusieurs espaces de noms.
Bien que si j'écrivais une grande bibliothèque de classes publiques, alors je serait probablement utiliser plusieurs espaces de noms dans le projet pour que l'assemblage ait un aspect soigné dans l'outillage et la documentation.