Warum wurde das Dependency Injection Muster in der nicht incluided Viererbande ? Hat die GOF vor dem Datum weitverbreitete automatisierte Tests durchgeführt? Wird die Abhängigkeitsinjektion jetzt als Kernmuster betrachtet?
design-patterns
Tom Squires
quelle
quelle
Antworten:
Ich war Herausgeber der Zeitschrift Software Development , als das Buch „Gang of Four“ herauskam, und ich kann mit voller Zuversicht sagen, dass Unit-Tests 1994, als Design Patterns ursprünglich veröffentlicht wurde, keine weit verbreitete Praxis waren .
Im Jahr 1994 war C ++ die am häufigsten verwendete objektorientierte Sprache, und die meisten Programmierer kamen aus einem C-Hintergrund. Eines der Dinge, die Menschen einfach nicht hatten, ist die Idee von Hunderten oder Tausenden von Einstiegspunkten in Ihr Programm. Du hast über das nachgedacht
main()
. Wenn Sie an einem großen Projekt gearbeitet haben, verfügen Sie möglicherweise über ein (normalerweise recht umfangreiches) Makefile, um ein modulbasiertes Programm zu erstellen. Aber "Unit-Testing"? Starten eines Prozesses, Erstellen des erforderlichen Speicherkontexts, Ausführen und Herunterreißen des Prozesses auf Methodenbasis ? Das war sehr radikal.Java hat die Programmierung mit mehreren Einstiegspunkten deutlicher gemacht. Zur Zeit des ursprünglichen Dot-Com-Booms war Unit-Testing eine bekannte Technik, aber es war wirklich JUnit (circa 2001?), Das dazu führte, dass es sich entzündete und zu einer universellen Praxis wurde.
Obwohl Strategie und das allgemeine Konzept der Programmierung einer Schnittstelle Teil von GoF und dem Zeitgeist Mitte der 90er Jahre waren, kam die Idee der Injektion erst spät auf die Party (circa '03 -'05?). Ehrlich gesagt, meine grauen Haare sind immer noch ziemlich zweifelhaft in Bezug auf diesen Aspekt von DI ("Verschwinde von meinem Rasen, du verdammte Konfigurationsdateien!").
quelle
Sie nannten es Strategie .
Ihre Strategie scheint alle Merkmale der Abhängigkeitsinjektion ohne den komplex klingenden Namen zu haben.
quelle
Ich denke, dass die Abhängigkeitsinjektion relevanter ist, wenn die Implementierung in Ebenen getrennt wird. Ein weiterer Bereich, in dem wir uns mit der Abhängigkeitsinjektion befassen, sind Unit-Tests. Und Ihr Vorschlag vor dem Date scheint korrekt zu sein. Wenn die Bande 2012 Muster sammelt und trennt, wird es definitiv eine Abhängigkeitsinjektion geben.
Strategie könnte in Diskussionen auftauchen, aber Strategie spricht nicht über Abhängigkeitsinjektion. Wenn Sie jedoch ein Strategiemuster in einem einzelnen Projekt oder einer DLL verwenden (alle Klassen und Schnittstellen verbleiben in einem Projekt), scheint es, dass wir eine Abhängigkeitsinjektion durchführen. In der Tat sind wir nicht.
Wenn nun die Klassen und Interfaces, die im Strategiemuster erwähnt werden, in verschiedenen Projekten oder Ebenen getrennt sind, müssen WIR Abhängigkeitsinjektionstechniken verwenden. Wir könnten Unity-Konfigurationsdateien verwenden (allerdings ist keine Laufzeitänderung möglich). Das Strategiemuster sagt jedoch nicht aus, wie eine Abhängigkeit injiziert werden soll.
Wenn es ein Muster gibt, das der Abhängigkeitsinjektion sehr ähnlich ist, handelt es sich um das Abstract Factory-Methodenmuster. Dieses Muster könnte in einem Strategiemuster verwendet werden, um Abhängigkeiten zu injizieren.
quelle
Die Antwortstrategie ist zu 100% richtig. Ich habe dafür gestimmt, kann mich aber dazu äußern.
"Mit Strategy kann der Algorithmus unabhängig von den Kunden variieren, die ihn verwenden. [1] Strategy ist eines der Muster in dem einflussreichen Buch Design Patterns von Gamma et al., Das das Konzept der Verwendung von Mustern zur Beschreibung von Software-Design bekannt machte."
Ein Entwurfsmuster ist nicht von seiner Verwendung abhängig. Die Abhängigkeitsinjektion wird mithilfe des Strategiemusters implementiert. Wenn wir jedes Muster basierend auf dem Anwendungsfall benennen würden, müssten wir viele Muster umbenennen.
Das Repository-Muster ist kein neues Muster, sondern das Vorlagenmuster.
"Bei der Vorlagenmethode dieses Entwurfsmusters können ein oder mehrere Algorithmusschritte von Unterklassen überschrieben werden, um unterschiedliche Verhaltensweisen zuzulassen und gleichzeitig sicherzustellen, dass der übergeordnete Algorithmus weiterhin eingehalten wird."
Oft sind die Muster mehrere kombinierte Muster, die beispielsweise als MVC-Muster bezeichnet werden.
Der GOF hatte keine Schnittstellen zu den verwendeten Pure Abstract-Klassen und nutzte auch die Fähigkeit von C ++, von mehr als einer Klasse zu erben.
quelle