2009-11-13 9 views
5

Angenommen, ich möchte ein Dependency-Injection-Framework in einem AOP-Ansatz verwenden, mit dem Ziel, Codemodule zu erstellen. Was ist die Best Practice für den Besitz der geteilten Schnittstellen? Unter Besitz verstehe ich den Code, der referenziert werden muss, um die Schnittstelle zu verwenden.Dependency Injection - Wem gehört die Schnittstelle?

Meine erste Vermutung ist, dass Sie in AOP eine Klassenbibliothek von Schnittstellen definieren würden, die nach aspect benannt sind. zB: company.aspect.logging.ILogger. Jedes Modul würde dann auf diese Bibliothek verweisen und vermeiden, dass irgendein Code, der bei der Implementierung von ILogger involviert ist, auch ILogger definiert.

Best Practices?

+0

Das ist genau was ich tun würde (mit Schnittstellen in separaten Klasse, die nur Schnittstellen hält). – Tomas

Antwort

1

Das Definieren einer Klassenbibliothek von Schnittstellen ist ein guter Anfang. Das gibt Ihnen die ultimative Flexibilität, da Sie alle Verbraucher und alle Implementierer völlig unabhängig voneinander variieren können.

Der Nachteil dieses Ansatzes besteht darin, dass, wenn Ihre Schnittstellen selbst Export andere Schnittstellen wie folgt aus:

public interface IMyInterface 
{ 
    IMyOtherInterface DoStuff(); 
} 

Sie können eine Menge von Mapping-Code schreiben müssen, die konkrete Klassen von den Schnittstellen bestücken können (oder Sie können ause AutoMapper).

Wenn Sie nur einen Verbraucher, aber mehrere Betreiber haben, können Sie sich etwas von diesem Mapping sparen, indem Sie die Schnittstellen zusammen mit dem Verbraucher definieren (nie mit dem Implementierer), aber Sie verlieren etwas an Flexibilität. Sie können die Implementierer jedoch unabhängig vom Konsumenten variieren, aber nicht umgekehrt.

+0

Ich denke, ein Abhängigkeits-Injection-Framework würde sich um einen Großteil des Mapping-Codes kümmern, wobei Google Guice als Beispiel genommen wird. Vielen Dank für die Einführung in AutoMapper. Meine erste Idee für dieses Tool in Bezug auf meine Frage wäre: 1 - Schnittstellen mit der Implementierung definieren 2 - AutoMapper verwenden, um eine Adapterschicht zu erstellen So erreichen Kapselung und Unterstützung für Module von Drittanbietern. Nur grübeln ... –

0

Es hängt von dem Zweck der Schnittstelle:

Wenn der Zweck der Schnittstelle zu einen Standard Protokoll zwischen einer Reihe von alternativen Anbietern definieren und einem einzigen Verbraucher wird die Schnittstelle vom Verbraucher gehört.

Wenn der Zweck der Schnittstelle zu ein Standard Protokoll zwischen einem einzelnen Anbieter und einer Reihe von alternativen Verbrauchern definiert ist, ist die Schnittstelle Eigentum des Lieferanten.

Wenn der Zweck der Schnittstelle zu ein Standard Protokoll zwischen einer Reihe von alternativen Lieferanten und eine Reihe von alternativen Verbrauchern definiert ist, steht die Schnittstelle für sich.

Schließlich, wenn Schnittstellen als eine allgemeine Ausrichtung zu Komplexität reduzieren verwendet wird, werden sie in der Regel von den Verbrauchern im Besitz und sollen so eng wie möglich so definiert werden, dass jede Schnittstelle des Verbrauchers Anforderungen in spezifischen Anforderungen Kontext unterstützt.