http://fabiokung.com/2010/05/06/ruby-and-dependency-injection-in-a-dynamic-world/: das ist eine andere, viel weniger opinionated Artikel als der James Buck Artikel. Das Endergebnis ist, dass Sie keine Abhängigkeitsinjektion benötigen, da Ruby viele gute Alternativen bietet, die ebenso gut funktionieren und in der Java-Welt nicht wirklich existieren.
Eine dieser Alternativen ist Mixins, etwas, was Java nicht hat und das andere ist die Fähigkeit, fast alles in der Sprache zu überschreiben/neu zu definieren. Zu den weiteren Funktionen gehört die dynamische Typisierung, bei der Sie im Prinzip jede Nachricht an ein beliebiges Objekt senden können und wenn es sich dabei um eine Implementierung für diese Nachricht handelt, funktionieren die Dinge einfach. All diese Dinge arbeiten zusammen, um viel von der Notwendigkeit eines DI-Frameworks zu entfernen. Das Designmuster als solches ist auch in Ruby immer noch gültig und manchmal macht es nur Sinn es zu benutzen. Ein weiterer Punkt über DI, den Alexey Petrushin oben erwähnt, ist, dass Dependency Injection in erster Linie ein Designmuster ist und dass das Tooling zweitrangig ist und hauptsächlich darum geht, die Mühsal bestimmter Dinge in Java loszuwerden. In Ruby können Sie das meiste, was Spring oder Guice für Sie in Java machen, trivial emulieren.Ein vollständiges Framework für die Injection-Injection ist daher in Ruby im Wesentlichen redundant.
Das gesagt, manchmal mit einem DI-Framework ist irgendwie nett, da letztlich kann es einige der Langweiligkeit der Verkabelung Zeug wegnehmen. Ich kann nicht für irgendwelche Ruby-spezifischen DI-Frameworks bürgen, aber ich kenne eine Menge Ruby-Projekte, die schließlich in einer anderen Sprache (Java sogar) umgeschrieben wurden, weil die Playdoh-Natur der Dinge dazu führt, dass Dinge schwer aufrechtzuerhalten/zu erweitern sind. Ich vermute, das hat viel damit zu tun, dass Entwickler sich mit den verschiedenen mächtigen Sprachfeatures in den Fuß schießen. Ein DI-Framework erfordert ein bisschen Struktur und Idiome, die dazu beitragen können, dies zu verhindern.
Ich habe diesen Vortrag am letzten Wochenende persönlich bei RubyConf gesehen, er hat einen fantastischen Job gemacht. Unterste Zeile - Sie benötigen keine Abhängigkeitsinjektion in Ruby. – mwilliams
Der Artikel sagt nicht, dass Sie keine Abhängigkeitsinjektion verwenden sollten, es sagt, dass Sie kein DI-Framework benötigen. Hier ist ein weiteres Zitat aus dem Artikel: "Also, gibt es keinen Platz für DI in Ruby? Da ist definitiv. Ich benutze DI fast jeden Tag in Ruby, aber ich benutze kein DI-Framework. Ruby selbst hat genug Kraft, um jeden Tag darzustellen -tagtägliche DI-Idiome. " –
Ich möchte nur darauf hinweisen, * DI-Frameworks * sind in Ruby unnötig, aber das * DI * -Paradigma sollte nicht ignoriert werden. –