2009-03-31 5 views
1

J'ai beaucoup de projets qui sont nommés d'après les types d'espaces de noms sont sousQuand ajoutez-vous un nouveau projet pour un espace de noms imbriqué?

alt text

Lors de l'ajout d'un nouveau sous-espace de noms, comment décidez-vous à
• créer un nouveau dossier dans un projet
- - ou -
• créer un nouveau projet dans une solution?

Quels sont les dés/avantages que je devrais considérer pour chaque scénario?

Répondre

5

La question que vous devez vous poser est la suivante: est-ce que les deux parties du code s'emboîtent logiquement comme une unité de déploiement? Si oui, gardez-les dans le même projet. Sinon, séparez-les.

Pour être honnête, je voudrais rarement créer un nouveau projet pour l'espace de noms "imbriqué" - il ne semble pas fonctionner de cette façon habituellement. En particulier, réfléchissez à la question de savoir si vous souhaitez accéder à l'espace de noms "imbriqué" à partir de l'espace "externe" et vice versa - s'ils se réfèrent raisonnablement l'un à l'autre, ils doivent être dans le même projet.

+0

L'espace de noms imbriqué accède probablement à l'espace de noms parent, mais pas vice versa. L'espace de noms parent ne dépendra pas de l'espace imbriqué. Donc, par exemple) "Project.Common.Util" pourrait faire référence à "Project.Common" mais "Project.Common" sera inconscient de "Project.Common.Util" – Sung

+0

@Sung: Je suis en désaccord par exemple System.Data.DataTable.Load (IDataReader) n'est qu'un exemple. J'ai également vu ce doen où beaucoup de classes de configuration pourraient être poussées vers un espace de noms enfant. – JoshBerke

+0

@Josh: Cela ne créerait-il pas une référence circulaire habituellement? – Sung

1

juste ajouter mes 2 cents à cette question, d'élargir la réponse de Jon avec quelques « été là - fait que » l'expérience:

Je suis allé dans plusieurs solutions, au moins deux projets nommés par espace de noms (bien, sorte de). Par exemple, en travaillant sur la solution MyApp, j'aurais MyApp.Web et MyApp.Web.Controls.

Ou: MyApp.Service, MyApp.Core, MyApp.Core.Entities et ainsi de suite. Assez bien connu convention de nommage, où l'espace de noms racine va comme MyCompany.MyApp.Service etc...

Avantage: - trouvé très utile lorsque l'on travaille dans une équipe, pour mettre en évidence les dépendances entre les modules d'applications. Si votre module Web.Controls (c'est juste un exemple, ne choisissez pas :) est partagé sur l'interface Web, vous ne voulez généralement pas de code spécifique à l'application dans vos contrôles personnalisés. Garder le module "enfant/imbriqué" séparé (référencé par le projet principal) renforce cela. - au moins y penser vous aidera potentiellement à créer une meilleure structure de projet. Quel espace de noms va dans un projet séparé et lequel ne le fait pas? Répondre à la question seule est assez utile.

Inconvénient: - il est très facile d'obtenir « la gâchette facile » et de créer une centaine de projets au lieu de faire des dossiers appropriés/namespaces. Cela dit, habituellement, vous avez tendance à créer des dossiers au lieu de projets séparés, sauf dans le cas où c'est vraiment un "sous-module".

+0

+1 Très bonnes choses, Dan! Merci de partager votre expérience avec ce problème. – Sung

Questions connexes