2010-02-03 5 views
6

Im Buch Domain Driven Design von Eric Evans, in Kapitel 6 im Abschnitt über die "Fabriken" (Seite 139) es sagt den folgenden:DDD-Buch, Eric Evans: Was ist gemeint mit "The FACTORY sollte auf den gewünschten Typ abstrahiert werden, anstatt auf die konkrete (n) Klasse (n), die erstellt wurde."?

„Die zwei Grundvoraussetzungen für jede gute FACTORY:

...

"2. Die Fabrik soll eher als die konkrete Klasse erstellt gewünschten die Art abstrahiert wird (es).“

Könnten Sie bitte auf erarbeiten, was mit dieser Aussage über Grundvoraussetzung Nummer gemeint 2.

Antwort

8

Carlos Loths Antwort ist korrekt, aber Sie sollten immer daran denken, auch eine Abstract Factory zu verwenden, da Sie Betonfabriken an Betontypen koppeln können, ohne die Verbraucher an Betonfabriken oder -typen zu binden.

public interface ISomethingFactory 
{ 
    ISomething Create(); 
} 

public class SomethingFactory : ISomethingFactory 
{ 
    public ISomething Create() 
    { 
     return new Something(); 
    } 
} 
10

Ich denke, es bedeutet, dass Sie Wenn Sie beispielsweise über eine Schnittstelle verfügen, sagen wir ISomething, eine anstract-Klasse SomethingBase und schließlich einige Klassen, die diese Schnittstelle implementieren und von der Basisklasse erben. Ihre Erstellungsmethode sollte den Schnittstellentyp zurückgeben Ich glaube, das ist die Idee.

public ISomething Create() { ... } 

Statt

public SomethingBase Create() { ... } 

Ich hoffe, es hilft, Carlos.

+0

danke für Ihre schnelle Antwort. Obwohl ich immer noch etwas verwirrt bin, heißt es auch später im Buch (unten auf S.143) "Die FACTORY ist an die konkrete Klasse der Produkte gekoppelt"; Glücklicherweise entwickle ich PHP, also sind "Rückgabetypen" technisch gesehen (obwohl konzeptionell immer noch wichtig) –

+3

Ich denke, es sagt es, weil Sie in den meisten Fällen die konkrete Klasse innerhalb der Create-Methode unter Verwendung der neuer Betreiber Somit haben Sie eine starke Verbindung zwischen der Schöpfungsmethode und dem Betontyp. Ihre Konsumenten beziehen sich nicht unbedingt auf den konkreten Typ, nur die Schnittstelle. Die Fabrikklasse muss jedoch auf den konkreten Typ verweisen. –

+0

Ich denke, ich sehe. Nutzen Sie also grundsätzlich die verschiedenen Creational Patterns (GoF), um die Signatur- und Rückgabetypen der Factory-Klassen so allgemein wie möglich zu halten, um die konkreten Implementierungen abzuschirmen. Sie können jedoch immer noch eine Factory-Klasse verwenden, die an ein konkretes Domänenobjekt gebunden ist, solange die Schnittstelle generisch ist. So sind LampshadeFactory und eine SofaFactory immer noch in Ordnung, solange sie sich hinter der abstrakten Oberfläche von FurnitureFactory verstecken. –