J'ai des problèmes pour nommer correctement mes classes et services lorsque des utilitaires et autres classes d'aide sont impliqués.
Comment structureriez-vous les éléments suivants:
EventService.cs
EventServiceUtils.cs
EventServiceValidators.cs
EventServiceCoordinator.cs
etc...
J'ai plusieurs services avec les mêmes besoins que le service ci-dessus. Une idée est de séparer tout cela dans un espace de noms approprié, en le faisant ressembler à ceci:
Services.EventService.EventService.cs //(the actual service)
Services.EventService.Validators.DateValidator.cs
Services.EventService.Validators.ParticipantValidator.cs
Services.EventService.Coordinators.ParticipantCoordinator.cs
Services.EventService.ExtensionMethods.Extensions.cs
etc. Chaque espace de noms est bien sûr un dossier séparé. Mais cela ne semble pas à 100%, car il y en a probablement plus DateValidators
dans les autres services, ce qui peut facilement conduire à une référence indésirable.
Et le Services.EventService.EventService.cs
inclut également le nom de classe dans l'espace de noms, ce qui n'est pas bon non plus. Vous pouvez utiliser Services.Event.EventService.cs
, mais il existe bien sûr déjà une entité avec ce nom.
Ceci est le modèle de domaine.
la source
Réponses:
Je pense que la plus grande chose que vous puissiez faire pour améliorer votre espace de noms ici est de supprimer
Service
de votreEventService
espace de noms. J'ajusterais également les espaces de noms pour qu'ils ressemblent davantage à ceci:Je pense toujours que cela pourrait utiliser une amélioration.
J'aimais les espaces de noms, mais aujourd'hui, je pense que moins c'est plus. L'imbrication profonde de vos espaces de noms peut rendre votre code trop verbeux, et décomposer les choses jusqu'à présent réduit considérablement votre capacité d'héritage. Dans votre code par exemple, une
DateValidator
classe pourrait facilement être utilisée ailleurs, donc elle ne devrait pas avoir beaucoup d'espaces de noms au-dessus, car des services autres que EventService peuvent désormais tirer parti d'une classe DateValidator. Il en va de même pour les méthodes d'extension. Il n'y a pas de temps (que je puisse voir) où vous auriez besoin de voir toutes vos méthodes d'extension en même temps, il est donc plus logique de le regrouper avec la chose à laquelle il se rapporte. Dans ce cas,EventExtensions
probablement des liens vers les vôtresEventService
, donc logiquement ils devraient s'asseoir ensemble à mon avis.la source
Pourquoi ne lisez-vous pas les Consignes générales de dénomination et les Consignes de dénomination des espaces de noms de Microsoft pour suivre un modèle universel?
Je pense que la formule
<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]
fonctionne très bien.la source
Une conception appropriée de l'espace de noms prendra en compte la conception logique et physique.
Bien que la raison d'être des espaces de noms était principalement de prévenir les conflits de noms entre les noms d'objet et de méthode, il est devenu un élément important dans l'architecture et la conception globales de la solution. Non seulement vous voulez que votre hiérarchie conceptuelle et votre conception logique aient un sens, mais vous voulez aussi que votre code soit soigneusement rangé dans des bibliothèques bien conçues et facilement réutilisables qui peuvent être facilement regroupées dans d'autres projets et produits plus tard. C'est peut-être davantage le résultat souhaité d'une bonne conception physique.
Regardez le .NET Framework et comment les unités de fonctionnalités associées vous sont données dans des assemblages de taille raisonnable. Vous pouvez ajouter une référence et une déclaration d'utilisation et tout à coup, vous disposez de fonctionnalités pertinentes sans avoir à glisser dans un certain nombre d'éviers de cuisine. Cela est dû au fait que la conception physique du .NET Framework, y compris l'espace de noms intelligent, a empaqueté du code lié logiquement dans des unités déployables physiquement liées. En créant un excellent mappage entre les espaces de noms et les assemblys, les architectes et les développeurs du framework .NET de Microsoft ont rendu votre travail beaucoup plus facile (bien sûr, certains peuvent argumenter le contraire, mais je suis plutôt satisfait de ce qu'ils ont fait).
L'espace de noms en C # est plutôt arbitraire. Vous pouvez placer des espaces de noms dans les endroits les plus étranges, dans des assemblages éloignés les uns des autres. Toute discipline utile dans ce domaine est vraiment votre contribution personnelle à un produit logiciel bien organisé. Je n'oserais pas vous conseiller exactement quoi faire dans chaque cas. Ce que j'espère accomplir, dans cette réponse, est de vous faire penser à la conception physique ainsi qu'à la conception logique lorsque vous définissez vos espaces de noms. Plus vous gardez les choses logiquement liées et déployées (physiquement), plus les choses seront faciles plus tard, à la fois pour vous et pour les autres qui pourraient avoir besoin de gérer votre code un jour.
Alors, pensez à la façon dont votre code sera empaqueté dans les assemblys et les composants lorsque vous résolvez vos problèmes d'espaces de noms!
la source