2017-04-18 4 views
0

Ich beziehe mich auf GoF Abstract Factory und Factory-Methode Muster. Ich verstehe ihren Zweck, aber was mich irritiert, ist, dass beide Muster die Diskussion darüber auslassen, wie der Klient eine Instanz des "Fabrikobjekts" bekommt. Zum Beispiel in der folgenden Abstract Factory Muster, nimmt die Diskussion, dass einige andere Rahmen oder Treibercode hat bereits die Hierarchie aufgebaut und das Application Instanz enthält bereits eine Instanz von GUIFactory (entweder WinFactory oder OSXFactory)Factory zum Erstellen von Factory?

(Quelle : https://en.wikipedia.org/wiki/Abstract_factory_pattern) Abstract factory pattern

ähnliches Argument geht in Richtung Factory Method Muster. Die Diskussion geht davon aus, dass etwas anderes außerhalb von MagicMazeGame bereits instanziiert wurde.

(Quelle: https://en.wikipedia.org/wiki/Factory_method_pattern) Factory method pattern

Warum es mich stört? Weil wir dann ein anderes Muster brauchen, um diese Objekthierarchien zu konstruieren, und dieses Muster ist dasjenige, das viele Leute tatsächlich meinen, wenn sie sagen: Factory. Grundsätzlich ist die Fabrik Muster ist die folgende:

(Quelle: Domain Driven Design, Eric Evans 2003) factory pattern

Dies ist ein anderes Muster von entweder Abstract Factory oder Factory Method, meiner Meinung nach. Der Client legt Anforderungen fest und die Factory erstellt Objekte basierend auf den Anforderungen sowie basierend auf Konfiguration und Kontext. Als hypothetisches Beispiel gibt der Client an, dass er ein abstraktes Objekt Connection möchte. Die Factory erstellt je nach dem im System konfigurierten Datenbanktreiber MySQLConnection oder OracleConnection.

So sind meine Fragen:

  • ist ein Begriff für das letzte Muster dort I beschrieben? (Ich versuchte zu erforschen, aber der Begriff Fabrik bedeuten immer Fabrikmuster in GoF)
  • was sollte die Fabrik, die Fabriken verursachen, genannt werden? GUIFactoryFactory ???
  • oder bin ich völlig falsch über all das?

Ich weiß, dass diese Frage nur um sich zu fragen, wie die Dinge zu nennen, aber ein Ubiquitous Sprache mit (Quelle: Domain Driven Design, Eric Evans 2003. Und ich stimme vollständig) ist auch sehr wichtig, in der Softwareentwicklung meiner Meinung nach.

Antwort

2

Das Muster, das zum Erstellen von Objekthierarchien verwendet wird, lautet Composition Root. Dieses Muster gilt für die Konstruktion von Betongegenständen, die eine Schnittstelle erfüllen sollen, einschließlich von Betonfabriken, die dazu bestimmt sind, Fabrikschnittstellen zu erfüllen.

Zusammensetzung Wurzel wird normalerweise in Verbindung mit Abhängigkeitsinjektion verwendet, so ist es interessant zu bemerken, dass Erich Gamma mentioned Hinzufügen von Abhängigkeitsinjektion, als er im Jahr 2009 gefragt wurde, wie er das GoF-Buch "umgestalten" könnte.

Das Diagramm von Eric Evans scheint eine Architekturansicht zu sein, wobei der Begriff Fabrik als Platzhalter für jedes Fabrikmuster verwendet wird. Mit anderen Worten, es könnte eine abstrakte Fabrik, eine Fabrikmethode oder ein anderes Fabrikmuster außerhalb der GoF darstellen. Das bestimmte Fabrikmuster spielt auf der Architekturebene keine Rolle, nur die Idee, dass der Klient die Instanziierungslogik einer anderen Komponente vorenthält.