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)
ä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)
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)
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.