Frage

Mir gefällt die Idee, Schnittstellen und Implementierung getrennt zu haben.Aber wie getrennt?Befinden sich die Schnittstellendefinitionen in einer separaten .Net-Assembly?Haben Sie ein einzelnes Projekt, das alle Schnittstellen für eine Lösung definiert?Gibt es sonst Probleme mit zirkulären Abhängigkeiten von Schnittstellen?

War es hilfreich?

Lösung

Setzen Sie Ihre Domain-Objekte und Schnittstellen in einer separaten "Domäne" assembly.
Diese Versammlung sollte nie etwas anderes als den Kern .net Assemblys verweisen.

Auf diese Weise ist eine saubere Trennung von Ihrer Domain / Service-Modell und Implementierung erhalten.

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

Andere Tipps

Ich würde nicht die Schnittstellen in eine separate Baugruppe setzen, nur um von ihm. Wenn jedoch die Schnittstellen teilweise in irgendeiner Form von IPC oder Erweiterbarkeit Architektur nehmen dann oft macht es Sinn, sie ihre eigene Versammlung zu geben.

Wenn Sie Projekte, die sich gegenseitig referenzieren müssen, dann ja, müssen Sie eine separate Baugruppe für die Schnittstellen, aber Sie sollten auch vorsichtig Architektur untersuchen, um zu sehen, ob es einen anderen Weg zur Lösung die kreisförmige Abhängigkeit.

Ich ziehe halte die am häufigsten verwendeten oder einfachen Implementierungen der Schnittstelle in einem Unterordner (und Namensraum) nach dem Namen der Schnittstelle.

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

Wenn ich erweitern diese Klasse außerhalb des Projekts. In einem speziellen Projekt, wiederholen Sie den Ordner / Namensraum ähnlich.

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

Im Projekt arbeite ich jetzt an, die Schnittstellen und die damit verbundene Basisklassen gehen in Baugruppen, die aus den Funktionen logisch unterteilt sind. Die Implementierungen dieser Anbieter und Klassen gehen in einer Kernanordnung. Die Idee ist, dass Menschen, die unsere API verwenden, können mehr oder eine des API-DLLs in einer klaren und logischen Weise verweisen.

Kleinere Anwendungen haben diese Art der Trennung nicht benötigen. Aber egal, wo ich die Schnittstellen zu halten, würde ich sie im gleichen Namensraum wie alle Basisklassen hält.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top