Non.
J'ai essayé les deux méthodes sur de petits et grands projets, à la fois 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 noms par projet et toutes les classes vont dans cet espace de noms. Vous êtes alors libre de placer les fichiers de classe dans les dossiers de projet de votre choix. Il n'y a pas de problème à ajouter en permanence des instructions using en haut des fichiers car il n'y a qu'un seul espace de noms.
Il est important d'organiser les fichiers source dans des dossiers et à mon avis, tous les dossiers devraient être utilisés. Il n'est pas nécessaire d'exiger que ces dossiers soient également mappés aux espaces de noms, cela crée plus de travail, et j'ai trouvé que cela nuisait à l'organisation car le fardeau supplémentaire encourage la désorganisation.
Prenez cet avertissement 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 vidage de nouveaux fichiers dans un dossier générique Project.General, ou même 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 jamais?
Recherche de fichiers
La réponse acceptée dit: "Les classes seront plus faciles à trouver et cela seul devrait être des raisons suffisantes."
Je soupçonne que la réponse fait référence à la présence de plusieurs espaces de noms dans un projet qui ne correspondent pas à la structure de dossiers, plutôt qu'à 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 Atteindre la définition ou la zone Explorateur de solutions de recherche dans Visual Studio. Ce n'est pas non plus 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? Est-il peut-être plus facile de simplement empêcher que cela soit possible? 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, puis soudainement vous découvrez que vous avez un cas particulier. Supposons que vous ayez deux classes Rectangle définies dans des espaces de noms séparés:
- classe Project1.Image.Rectangle
- classe Project1.Window.Rectangle
Il est possible de rencontrer un problème pour lequel un fichier source doit inclure les deux espaces de noms. Maintenant, vous devez écrire l'espace de noms complet partout dans ce fichier:
var rectangle = new Project1.Window.Rectangle();
Ou déconner avec une déclaration d'utilisation désagréable:
using Rectangle = Project1.Window.Rectangle;
Avec un seul espace de noms dans votre projet, vous êtes obligé de proposer 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 à faire face à un cas particulier lorsqu'un fichier utilise les deux types.
utiliser des instructions
using Project1.General;
using Project1.Image;
using Project1.Window;
using Project1.Window.Controls;
using Project1.Shapes;
using Project1.Input;
using Project1.Data;
contre
using Project1;
La facilité de ne pas avoir à ajouter des espaces de noms tout le temps lors de l'écriture de code. Ce n'est pas vraiment le temps que cela prend, c'est la rupture du flux de devoir le faire et juste de remplir des fichiers avec beaucoup d'instructions d'utilisation - pour quoi? Est-ce que ça vaut le coup?
Modification de la structure des dossiers de projet
Si les dossiers sont mappés à des espaces de noms, le chemin du dossier du projet est effectivement codé en dur dans chaque fichier source. Cela signifie que tout changement de nom ou tout déplacement d'un fichier ou d'un dossier dans le projet nécessite la modification du contenu réel du fichier. À la fois la déclaration d'espace de noms des fichiers dans ce dossier et les instructions using dans tout un tas d'autres fichiers qui référencent des classes dans ce dossier. Bien que les changements eux-mêmes soient triviaux avec l'outillage, 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 noms dans le projet, vous pouvez modifier la structure des dossiers du projet comme vous le souhaitez sans qu'aucun fichier source lui-même ne soit modifié.
Visual Studio mappe automatiquement l'espace de noms d'un nouveau fichier au dossier de projet dans lequel il a été créé
Malheureusement, mais je trouve que la correction de l'espace de noms est moins que celle de les gérer. J'ai également 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 de grands projets est d'avoir une organisation supplémentaire lors de l'affichage des classes dans n'importe quel outil qui affiche les classes dans une hiérarchie d'espaces de noms. Même documentation. Évidemment, le fait de n'avoir qu'un seul espace de noms dans le projet entraîne l'affichage de toutes les classes dans une seule liste plutôt que de les diviser en catégories. Cependant, personnellement, je n'ai jamais été perplexe ou retardé à cause d'un manque de cela, donc je ne trouve pas que cela soit un avantage suffisamment important pour justifier plusieurs espaces de noms.
Bien que si je devais écrire une grande bibliothèque de classe publique alors je serais probablement utiliser plusieurs espaces de noms dans le projet afin que l'ensemble soigné dans l' air de l'outillage et de la documentation.