Nous avons actuellement tout à fait un peu de classes dans un projet, et chacune de ces classes implémentent une interface, surtout pour les DI raisons.
Maintenant, mon sentiment personnel est que ces interfaces doivent être mis dans un autre espace de noms au sein de la même assemblée (nous avons donc un MyCompany.CoolApp.DataAccess
de l'assemblée, et dans ce qu'il y a un Interfaces
d'espace de noms de donner des MyCompany.CoolApp.DataAccess.Interfaces
).
Cependant, quelqu'un a suggéré que ces interfaces doivent être réellement dans leur propre assemblée. Et ma question est: sont - ils de droite? Je peux voir qu'il y a certains avantages (par exemple. d'autres projets aurez seulement besoin de consommer de l'interface de l'assemblée), mais à la fin de la journée, l'ensemble de ces assemblées allez avoir besoin d'être chargé. Il me semble aussi qu'il pourrait être un peu plus complexe problème de déploiement de, que Visual Studio ne tirez pas automatiquement la mise en œuvre de l'assemblage dans le dossier bin.
Sont-il des lignes directrices de pratiques exemplaires pour cela?
EDIT:
Que mon point de vue un peu plus clair: Nous avons déjà séparé de l'INTERFACE utilisateur, DataAccess, modèle de données et d'autres choses dans les différentes assemblées. Nous pouvons également en train d'échanger nos de mise en œuvre avec une mise en œuvre différente, sans douleur, comme nous la carte de la mise en œuvre de la classe de l'interface à l'aide de l'Unité (CIO cadre). Je tiens à souligner que nous n'avons jamais écrire deux implémentations d'une même interface, sauf pour des raisons de polymorphisme et de créer des objets fantaisie pour les tests unitaires. Donc, nous ne sommes pas actuellement de "swap" une mise en œuvre, sauf dans les tests unitaires.
Le seul inconvénient que je vois à avoir l'interface de la même assemblée que la mise en œuvre est que l'ensemble de l'assemblée (y compris le solde non utilisé de la mise en œuvre), aura été chargé.
Je peux, cependant, voir le point de les avoir dans une autre assemblée qui signifie que les développeurs n'ont pas accidentellement "nouvelle" la mise en œuvre de la classe plutôt que de l'avoir créé à l'aide du CIO wrapper.
Un point que je n'ai pas compris à partir des réponses est le problème de déploiement. Si je suis juste en fonction de l'interface assemblées, je vais avoir un quelque chose comme la structure suivante:
MyCompany.MyApplication.WebUI
References:
MyCompany.MyApplication.Controllers.Interfaces
MyCompany.MyApplication.Bindings.Interfaces
etc...
Quand j'ai construit ce, les assemblées qui sont automatiquement placés dans le dossier bin sont ceux de l'interface assemblées. Cependant, mon type de mappings à l'unité de la carte d'interfaces différentes pour leurs implémentations réelles. Comment les assemblées qui contiennent mes implémentations à la fin dans le dossier bin?