Frage

Ich habe Suche wurde bei einigen Ruby-Dependency Injection-Bibliotheken. In besonders, ich ausgecheckt Nadel und Copland . Sie haben es schon eine ganze Weile, aber nicht viele Verwendungen.

Was sind einige der Vor-und Nachteile dieser beiden Bibliotheken? Es scheint sicher, wie viele Bibliotheken / Frameworks da draußen gute Verwendung dieser beiden Bibliotheken machen könnte, zum Beispiel Merb / Datamapper Hook .

War es hilfreich?

Lösung

Jamis Buck, der schrieb Copland und Nadel, geschrieben hier etwa Nadel, Dependency Injection und ihre Nützlichkeit in einer Ruby-Welt.

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 ist nicht erforderlich. In mehr   starre Umgebungen, sie haben einen Wert.   In agilen Umgebungen wie Ruby, nicht   so sehr. Die Muster selbst kann   noch anwendbar sein, aber hüte dich vor   in die Falle denken Sie   benötigt ein spezielles Werkzeug für alles.   Ruby-Play-Doh ist, denken Sie daran! Lassen Sie uns halten   es auf diese Weise.

HTH

Andere Tipps

http: // fabiokung .com / 2010/05/06 / rubin und Abhängigkeit-Injektion-in-a-dynamic-Welt / : das ist eine andere, viel weniger opinionated Artikel als der James Buck Artikel. Unterm Strich ist, dass Sie nicht Dependency Injection brauchen, weil Rubin viele gute Alternativen bietet, die genauso gut funktionieren und dass nicht wirklich in der Java-Welt existieren.

Eine dieser Alternativen ist Mixins, das ist etwas Java nicht über und die andere ist die Fähigkeit, außer Kraft zu setzen / neu definieren nur um etwas in der Sprache. Weitere Features sind dynamische Typisierung, wo im Grunde Sie eine Nachricht an ein beliebiges Objekt senden kann, und wenn es eine Implementierung für diese Nachricht zu schaffen, geschieht, die Dinge einfach funktionieren. All diese Dinge zusammenarbeiten, um viel von der Notwendigkeit eines DI Rahmen zu entfernen. Das Entwurfsmuster als solche ist in Ruby immer noch gültig, wie gut und manchmal ist es nur Sinn macht, es zu benutzen.

Einen weiteren Punkt über DI, den Alexey Petrushin oben auch macht, ist, dass Dependency Injection ist in erster Linie ein Entwurfsmuster und dass das Werkzeug zweitrangig ist und vor allem darum, in Java der Langweiligkeit bestimmter Dinge loszuwerden. In Ruby können Sie trivialer meisten emulieren, was Frühling oder guice für Sie in Java tun. So ein vollständiges geblasene Dependency Injection-Framework ist im Wesentlichen überflüssig in Ruby.

aber sagen, dass manchmal ein DI-Gerüst ist irgendwie schön, da letztlich kann es einige der Langweiligkeit Verdrahtungs Zeug wegzunehmen. Ich kann nicht für Ruby-spezifische DI Frameworks bürgen aber ich kenne eine Menge von Ruby-Projekte, die in einer anderen Sprache wurde schließlich neu geschrieben (Java selbst), weil die playdoh Natur der Dinge bewirkt, dass die Dinge hart werden zu erhalten / verlängern. Ich vermute, das hat eine Menge mit den Entwicklern Schießen selbst in den Fuß mit den verschiedenen leistungsfähigen Sprachfunktionen zu tun. ein DI-Gerüst erlegt ein wenig Struktur und Idiome, die dies verhindern helfen können.

Hier ist ein weiteres IoC http://alexeypetrushin.github.com/micon

Ich benutze es als Kernkomponente meines Web-Framework (nicht Rails), Sie können es sehen, hier zu arbeiten - http: / /ruby-lang.info (diese Seite mit ihm versorgt). Und es hat mich gerettet viel von der Zeit und dem Code, so dass ich persönlich finde IoC sehr nützlich (in manchen Situationen).

  

DI-Frameworks ist nicht erforderlich. In steifen Umgebungen, sie haben einen Wert. In agilen Umgebungen wie Ruby, nicht so sehr. Die Muster können sich nach wie vor anwendbar sein, aber Vorsicht in die Falle des Fallens des Denkens Sie ein spezielles Werkzeug für alles brauchen. Ruby-Play-Doh ist, denken Sie daran! Lassen Sie uns halten es so.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top