2008-11-12 9 views

Antwort

46

Jamis Buck, der Copland und Needle, posted here über Nadel, Abhängigkeitsinjektion und ihre Nützlichkeit in einer Ruby-Welt schrieb.

Es ist lang, aber lesenswert, aber falls Sie den einzelnen Absatz am besten zu Ihrer Frage mögen, würde ich diese vorschlagen, von kurz vor dem Ende:

DI-Frameworks nicht erforderlich ist. In mehr starren Umgebungen haben sie einen Wert. In agilen Umgebungen wie Ruby, nicht so viel. Die Muster selbst können immer noch anwendbar sein, aber hüten Sie sich von fallen in die Falle des Denkens Sie brauchen ein spezielles Werkzeug für alles. Ruby ist Play-Doh, erinnere dich! Lassen Sie uns es so halten.

HTH

+2

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

+9

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. " –

+2

Ich möchte nur darauf hinweisen, * DI-Frameworks * sind in Ruby unnötig, aber das * DI * -Paradigma sollte nicht ignoriert werden. –

1

Hier ein mehr IoC http://alexeypetrushin.github.com/micon

ich es als Kernkomponente meines Web-Framework verwendet (nicht Rails), Sie können es sehen, hier zu arbeiten - http://ruby-lang.info (diese Seite mit ihm angetrieben). Und es hat mir viel Zeit und Code erspart, so finde ich persönlich IoC sehr nützlich (in einigen Situationen).

DI-Gerüste sind nicht notwendig. In starreren Umgebungen haben sie einen Wert. In agilen Umgebungen wie Ruby, nicht so sehr. Die Muster selbst mögen immer noch anwendbar sein, aber hüte dich davor, in die Falle zu fallen, dass du ein spezielles Werkzeug für alles brauchst. Ruby ist Play-Doh, erinnere dich! Lass es uns so beibehalten.

Ich beobachtete die Rede von Jamis Buck, und ich stimme und ihn Witz nicht einverstanden sind, ist hier, warum http://ruby-lang.info/blog/you-underestimate-the-power-of-ioc-3fh

7

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.

+2

Einverstanden, besonders mit dem letzten Absatz! –