2009-05-07 5 views

Répondre

2

Dépend de ce que sont les classes.

Une ligne directrice que j'essaie de suivre est que les dépendances entre les espaces de noms ne doivent pas suivre un cycle. En d'autres termes, les espaces de noms de bas niveau ne peuvent pas accéder aux types à partir d'espaces de noms de niveau supérieur.

Cela signifie que l'espace de noms MyApi haut niveau doit contenir:

  • Code de haut niveau: le code qui est autorisé à regarder à l'intérieur MyAPI.WebLogic et MyAPI.Compression
  • Ou, code de bas niveau : le code qui est utilisé par MyAPI.WebLogic et/ou MyAPI.Compression

Patrick Smacchia a écrit beaucoup sur les avantages de la structuration de votre code de cette façon, y compris sur ce site: Detecting dependencies between namespaces in .NET

0

Cela dépend vraiment de l'espace de noms. Si c'est une application alors peut-être quelque chose comme les classes bootstrapper, loaders etx, Main's etc. Je dirais (comme avec tout) "ça dépend".

3

Namespaces ne sont pas des concepts liés à la POO comme l'encapsulation. Là pour l'organisation, organisez-le d'une manière qui a du sens pour votre application. La plupart du travail que je fais sur les sites Web a une bibliothèque d'affaires et le plus souvent tout est caché sous un seul espace de noms.

0

Je ne pense pas que vous ne respectez pas vraiment l'encapsulation en soi en faisant cela.

Normalement namespaces sont juste une façon d'organiser vos classes pour les rendre plus faciles à trouver, donc tout ce qui fait sens pour votre application.

0

Vous n'êtes pas violer l'encapsulation du tout autant que je le vois. En fait, je ne suis même pas sûr que cela puisse être appelé encapsulation, étant donné que les espaces de noms ne sont pas spécifiques à la POO - c'est plutôt juste l'organisation des types.

La règle est tout simplement de placer un type dans l'espace de noms de niveau supérieur si vous sentez qu'il appartient là. Un exemple évident pour cette situation est quand (en utilisant vos exemples) MyAPI.WebLogic et MyAPI.Compression (peut-être aussi bien que d'autres) tous besoin d'utiliser un certain type - il est donc préférable de simplement mettre ce type dans MyAPI. Si vous n'êtes toujours pas sûr de ce qui appartient, utilisez les bibliothèques Microsoft comme exemples. Il y a beaucoup de classes dans l'espace de noms System dans la BCL!

Questions connexes