Que devrait aller dans l'espace de noms de premier niveau? Par exemple, si j'ai MyAPI.WebLogic, MyAPI.Compression, etc. Si je place des classes dans l'espace de noms de premier niveau, est-ce que je viole le principe de l'encapsulation?Qu'est-ce qui devrait aller dans un espace de noms de premier niveau?
Répondre
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
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".
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.
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.
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!
- 1. Désactiver Resharper sur un niveau de projet/espace de noms?
- 2. Où devrait aller ma méthode?
- 3. Espace de noms IInvokeProvider?
- 4. Comment référencer un espace de noms C++ externe à partir d'un espace de noms imbriqué?
- 5. Comment utiliser un seul espace de noms dans les fichiers?
- 6. Où chercher les noms d'assemblys .NET qui contiennent une classe ou un espace de noms?
- 7. Ajouter un espace de noms aux éléments
- 8. comment sélectionner un élément dans un espace de noms spécifique?
- 9. Définir un symbole dans un autre espace de noms
- 10. Regroupement dans un espace de noms et préfixation Classes
- 11. Exemples d 'espace de noms
- 12. Espace de noms System.Data.OracleClient abandonné?
- 13. F # et espace de noms
- 14. Problème de mise à niveau dans Installshield 2008 Édition Premier
- 15. Où devrait aller le code de validation pour UITextField?
- 16. espace de noms n'existe pas
- 17. SelectSingleNode sans espace de noms
- 18. "Masquer" les classes linq dans un espace de noms?
- 19. Définition d'une classe dans un espace de noms
- 20. Pouvez-vous mettre une bibliothèque dans un espace de noms?
- 21. Différents appenders par espace de noms
- 22. de flux de travail ne peut pas désérialisée après espace de noms XML mappage à un espace de noms CLR
- 23. Cache de premier niveau entre différentes sessions?
- 24. WCF et espace de noms System.Configuration
- 25. WPF: Espace de noms personnalisé XAML
- 26. Espace de noms SQL Server XML Declare
- 27. (ASP.NET) Manière automatique de placer toutes les classes codées dans un espace de noms
- 28. espace de noms cible du schéma
- 29. appel jQuery hors espace de noms
- 30. Comment ajouter un autre espace de noms à WCF SyndicationFeed?