2010-10-14 2 views
3

Je viens d'un environnement Java, et je vois beaucoup de gens dire namespaces = packages, mais en regardant autour de code disponible, il ne me semble pas que les gens utilisent des espaces de noms comme ils ont utilisé des paquets.Quelle est l'utilisation correcte de l'espace de noms C#?

Actuellement, je travaille sur une DLL pour gérer tous mes accès aux données à une base de données à partager entre deux applications Windows. Jusqu'à présent, j'ai créé des paquets comme je le ferais pour Java, ce qui fait que j'ai des sous-noms de domaines, services, DAO (je les appelle Repositories) de mon niveau supérieur. Est-ce correct? Est-ce que quelqu'un a écrit une meilleure pratique pour les espaces de noms? Je suppose que c'est probablement un point mineur, mais je ne veux pas aller à contre-courant pour ainsi dire.

Répondre

10

Légèrement subjectif, il n'y a pas de réponse "définitive, correcte" à cela.

Voici comment je le fais, avec l'intention que les assemblages peuvent être partagés entre les projets.

Considérons j'ai un nom de société appelée FooBar (+1 pour toute personne d'originalité? :)

Tous vos assemblées commencent à partir de cet espace de noms racine. Nous avons beaucoup d'assemblées partagées.

choses comme:

  • HTML Helpers MVC (UI). Ceux-ci vont en une assemblée.
  • Dépôt générique. Modèle de référentiel mis en œuvre avec des génériques, pour réutilisation.
  • LINQ Méthodes d'extension (pagination, usine de sucre syntactique générale). Encore une fois, ceux-ci vont dans une assemblée.

Ainsi, notre FooBar Univers Namespace pourrait ressembler à ceci:

FooBar 
| 
---- FooBar.Common.Mvc 
| 
---- FooBar.Common.DataAccess 
| 
---- FooBar.Common.Linq 
| 
---- FooBar.ProjectOne (ASP.NET MVC Web Application) 
|  | 
|  --- FooBar.ProjectOne.Repository (makes use of FooBar.Common.DataAccess) 
|  | 
|  --- FooBar.ProjectOne.WebMvc (makes use of FooBar.Common.Mvc) 
| 
---- FooBar.ProjectTwo (WPF Application) 
     | 
     --- FooBar.ProjectTwo.Repository (makes use of FooBar.Common.DataAccess) 
     | 
     --- FooBar.ProjectTwo.BindingServices (makes use of FooBar.Common.Linq) 

savoir ce que je veux dire?

Configurez vos espaces de nommage de manière à ce qu'ils soient «appropriés» en plaçant la logique commune dans les zones communes, en fonction de l'espace de noms hétérogène.

Vous trouverez beaucoup d'entreprises avec plusieurs projets partagés suivent cette tendance. Votre réflexion sur les «sous-noms» est correcte (à mon avis).

+0

D'accord. Fais ce que tu sens bien. Mais n'ayez pas peur de refactoriser vos espaces de noms lorsque vous vous adaptez et changez de langue. Alors que la pratique courante consistait à séparer les couches en assemblages, il est probablement préférable de garder les choses étroitement liées ensemble pour réduire les connexions. Eric Evans couvre cela (génériquement, et surtout avec Java) dans Domain Drive Design (http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215). Je pense que les mêmes leçons s'appliquent à .NET. – jwadsack

+0

@jwadsack - c'est une épée à double tranchant. Certaines choses devraient être liées ensemble. L'autre n'est pas. Référentiel/DAL par exemple. Devrait être découplé. Je suis un grand fan de Dependency Injection, c'est pourquoi j'aime faire abstraction autant que je peux. – RPM1984

+0

Super article. Merci pour l'information! –

0
+0

Cet article viril couvre ce qu'est un espace de noms est, et comment les utiliser. Ce que je cherche, c'est comment utiliser les espaces de noms dans le contexte ci-dessus. Aussi cet article est pour VB.NET –

0

Un usage courant est par exemple CompanyName.System.Module LogicStudio.ERP.GeneralLedger

+0

Je suis en train de le faire déjà. J'ai donc Company.Product.Module mais ma question est sur ce qu'il faut faire après cela –

Questions connexes