Verwenden Ruby-Programmierer (und andere dynamische Sprachprogrammierer) IoC / Dependency Injection?

8

Ich bin in erster Linie ein ASP.NET-Entwickler und das einzige, was mir in den letzten Jahren vorgestellt wurde und das die Qualität des von mir geschriebenen Codes am dramatischsten beeinflusst hat, ist das Erlernen der Verwendung von IoC-Containern zum Verwalten von Abhängigkeiten zwischen verschiedenen Ebenen der Anwendung effizient.

Ich habe es mir kürzlich zum Hobby gemacht, Ruby (und Rails) für persönliche Projekte zu lernen, und ich liebe die Sprache bisher. Eines der Dinge, die ich in den verschiedenen Tutorials und Referenzen, die ich verwendet habe, bemerkt habe, war, dass die Verwendung von IoC noch nicht erwähnt wurde. Dies steht in krassem Gegensatz zu .NET, wo es in einem frühen Stadium in Entwickler getrommelt wird (und wo es nicht sein sollte).

Ich weiß, dass ein Grund, warum die Abhängigkeitsinjektion in Ruby möglicherweise nicht erforderlich ist, darin besteht, dass alles in einer Klasse öffentlich und virtuell ist und so offen für Änderungen ist, dass es nicht wirklich benötigt wird, um gute Komponententests zu schreiben. Die Verwendung von IoC-Containern bietet natürlich noch viele weitere Vorteile, z. B. die damit verbundenen Entkopplungsoptionen, die Verwaltung der Objekterstellung und der Lebensdauer usw.

Wird die Abhängigkeitsinjektion in Ruby verwendet? Wenn nicht, warum ist dies kein Problem?

Richeym
quelle

Antworten:

6

Inversion of Control ist immer noch ein Konzept, das sich gut bewährt. Sie müssen keine Abhängigkeitsinjektion durchführen, um IoC anzuwenden, obwohl sie in .NET häufig zusammenpassen.

Der große Antrieb hinter der Abhängigkeitsinjektion in .NET besteht darin, abhängig von konkreten Implementierungen zu vermeiden. Wie Sie bereits erwähnt haben, sind die Dinge in Ruby viel offener und Sie können die Implementierung einer Klasse zur Laufzeit ersetzen, sodass Sie weniger "Schnittstellen" erstellen und Abhängigkeiten explizit einfügen müssen.

Es kann argumentiert werden, dass Schnittstellen und IoC / DI auch in .NET nicht unbedingt erforderlich sind (selbst beim Testen - es gibt spöttische Frameworks, mit denen Sie die Notwendigkeit beseitigen können, alles unter der Sonne zu verbinden), aber es ist so ausgeprägter in Ruby.

Adam Lear
quelle
4

Die Abhängigkeitsinjektion ist in dynamischen Sprachen weniger wichtig, da sie dynamisch sind . Sie können Ihren Code jederzeit ändern, damit Sie nicht vorausplanen müssen, ob sich Abhängigkeiten möglicherweise ändern. Es gibt einfachere Möglichkeiten, IoC in einer Sprache wie Ruby zu erreichen.

Fabio Kung zu diesem Thema, das sich auf Jamis Buck bezieht - diese geben ein bisschen Tiefe.

Glenatron
quelle