Question

J'aime l'idée de séparer les interfaces et l'implémentation.Mais comment se séparer ?Les définitions d’interface sont-elles dans un assembly .Net distinct ?Avez-vous un seul projet qui définit toutes les interfaces d'une solution ?Sinon, y a-t-il des problèmes avec les dépendances circulaires des interfaces ?

Était-ce utile?

La solution

Placez vos objets et interfaces de domaine dans un assemblage "domaine" séparé.
Cet assembly ne doit jamais faire référence à autre chose que les assemblys principaux .net.

De cette façon, vous obtenez une séparation nette entre votre modèle de domaine/service et votre implémentation.

Modifier:
http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

Autres conseils

Je ne mettrais pas les interfaces dans un assemblage séparé juste pour le plaisir.Cependant, si les interfaces participent à une forme quelconque d’architecture IPC ou d’extensibilité, il est souvent judicieux de leur attribuer leur propre assemblage.

Si vous avez des projets qui doivent se référencer les uns les autres, alors oui, vous aurez besoin d'un assembly séparé pour les interfaces, mais vous devriez également soigneusement examinez l'architecture pour voir s'il existe un autre moyen de résoudre la dépendance circulaire.

Je préfère conserver les implémentations les plus courantes ou les plus simples de l'interface dans un sous-dossier (et un espace de noms) suivant le nom de l'interface.

\project\
\project\IAppender.cs
\project\Appender\
\project\Appender\FileAppender.cs
\project\Appender\ConsoleAppender.cs

Si j'étends cette classe en dehors du projet.Dans un projet spécial, répétez les dossiers/espaces de noms de la même manière.

\specialproject\
\specialproject\Appender\
\specialproject\Appender\MemoryAppender.cs

Dans le projet sur lequel je travaille actuellement, les interfaces et les classes de base associées sont regroupées dans des assemblys logiquement divisés entre les fonctions.Les implémentations de ces fournisseurs et classes se déroulent dans un assemblage principal.L'idée étant que les personnes qui utilisent notre API peuvent référencer plusieurs ou une des DLL de l'API de manière claire et logique.

Les applications plus petites n'ont pas besoin de ce type de séparation.Mais peu importe où je conserve les interfaces, je les conserverais dans le même espace de noms que n'importe quelle classe de base.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top