2009-05-19 22 views
3

Ich arbeite an einem Projekt mit verschiedenen Baugruppen (stellen Sie sich ein Druckermodul, ein Imaging-Modul etc. vor). In diesem Projekt werden alle Interfaces innerhalb einer Interfaces-Assembly deklariert (imagine Interfaces.dll mit Interfaces IPrinterModule, IImagingModule etc.).Wo Schnittstellen deklarieren?

Da ich ein Cowboy-Coder bin;) muss ich die SO-Community fragen, ob das wirklich Best Practice ist oder wie das besser gemacht werden kann?

Antwort

4

implementiert Wir haben einen ähnlichen Ansatz angenommen. Sie möchten die Schnittstellen definitiv von ihrer (aktuellen) Implementierung trennen, so dass es in Zukunft einfach ist, verschiedene Implementierungen bereitzustellen. Martin Fowler hat dies als Separated Interfaces Muster beschrieben.

Wenn die Schnittstellen Abhängigkeiten voneinander haben (benötigt ein IPrinter eine IImageXXX?), Dann brauchen Sie sie wirklich in derselben Assembly, um zirkuläre Buildabhängigkeiten zu vermeiden.

+0

Sehr guter Punkt, wenn der IPrinter ein Objekt zurückgibt. Auch die Links. Danke! – Inno

+0

"Sehr guter Punkt, wenn der IPrinter ein Bild zurückgibt", meinte ich. – Inno

6

Das klingt gut für mich - eine separate Assembly für Schnittstellen ist ziemlich üblich, besonders für Systeme, die viele Plugins ausführen.

Höchstwahrscheinlich verwenden Sie diese Schnittstellen, um lose gekoppelte Brücken zwischen orthogonalen Komponenten zu erstellen (gut für Sie übrigens). Die einzige Möglichkeit, dies auf eine wirklich modulare Weise zu tun, ist eine separate Assembly für diese Schnittstellen, so dass jeder Typ, der entweder die Schnittstelle implementiert oder auf sie verweist, tatsächlich denselben Schnittstellentyp verwendet. Wirklich Ihre einzige andere Möglichkeit wäre, alles im gesamten System zu einer Baugruppe zusammenzustellen.

1

Wenn es Zirkelverweise gibt, dann hilft Ihnen das Beibehalten aller Ihrer Schnittstellen in einer separaten Baugruppe. Ich habe in den letzten Tagen viele Codebeispiele (von Microsoft, Codeproject und anderen Seiten) gelesen, während ich über den Workflow gelernt habe. Die Schnittstelle wird in der Assembly deklariert, die sie implementiert.

Wie IPrinterModule wird in der Versammlung erklärt werden, die

+0

Es könnte Klassen geben, die es in einer anderen DLL implementieren ... wie für Plugins. – CSharpAtl

Verwandte Themen