Fin*_*las 12 dependency-injection dynamic-languages
为了编写可测试的C#代码,我大量使用DI.
然而,最近我一直在搞乱IronPython并发现你可以模拟任何方法/类/函数等...你喜欢,对DI的需求已经消失.
这是Python等动态联盟的情况吗?
代替:
class Person(Address) {
...
Run Code Online (Sandbox Code Playgroud)
你可以有:
class Person() {
...
// Address initialised in here.
Run Code Online (Sandbox Code Playgroud)
对于动态语言,因此根据动态联盟的manaual DI,根本不需要.
有什么建议吗?
Ale*_*vik 10
依赖注入也是关于如何将事物连接在一起的 - 这与依赖对象的可模拟性无关.拥有Foo需要某种类型的Bar连接的-instance 直接实例化它并且让它完全忽略它如何获得该连接只要有它就有区别.
如果使用依赖注入,您也可以获得更好的可测试性.但反过来却不是这样.通过能够覆盖任何东西来简化可测试性并不会带来依赖注入的其他优点.由于这些原因,Python有许多组件/ DI框架可用.
Jör*_*tag 10
我非常不同意您在动态类型语言中不需要依赖注入的说法.DI有用和必要的原因完全独立于语言的输入规则.
主要区别在于动态类型语言中的DI简单易行:您不需要重量级框架和大量XML配置.
例如,在Ruby中,只有两个DI框架.两者都是由Java程序员编写的.单个项目都不使用这两个框架.这些框架的作者甚至都没有.
但是,DI在Ruby中被广泛使用.
Jamis Buck是这两个框架的作者,他在RubyConf 2008上发表了一篇名为" 从企业中恢复"的演讲,讲述了他编写这些框架的方式和原因以及为什么这是一个坏主意,值得关注.如果您想阅读,还有一篇随附的博客文章.(每当他说"Ruby"时,只需用"Python"代替,所有内容都同样有效.)