开发者社区> 问答> 正文

为什么IoC / DI在Python中不常见?

在Java中,IoC / DI是一种非常普遍的做法,广泛用于Web应用程序,几乎所有可用的框架和Java EE中。另一方面,也有很多大型的Python Web应用程序,但是除了Zope(我听说过应该非常糟糕的代码)之外,IoC在Python世界中似乎并不普遍。(如果您认为我错了,请举一些例子)。

当然,有一些流行的Java IoC框架的克隆可用于Python,例如springpython。但是它们似乎都没有被实际使用。至少,我从来没有在一个stumpled Django的或SQLAlchemy的 + ,它使用类似的东西,基于Web应用程序。

我认为IoC具有合理的优势,例如可以轻松替换django-default-user-model,但是在Python中广泛使用接口类和IoC看起来有些奇怪,而不是“ pythonic”。但是也许有人有更好的解释,为什么IoC在Python中没有得到广泛使用。

展开
收起
祖安文状元 2020-02-21 16:08:51 799 0
1 条回答
写回答
取消 提交回答
  • 我实际上并不认为DI / IoC 在Python 中并不罕见。什么是不常见的,但是,是DI / IoC的框架/容器。

    考虑一下:DI容器有什么作用?它可以让你

    将独立的组件连接到一个完整的应用程序中... ...在运行时。 我们有“连接在一起”和“运行时”的名称:

    脚本编写 动态 因此,DI容器不过是动态脚本语言的解释器。实际上,让我改写一下:一个典型的Java / .NET DI容器只不过是一个糟糕的解释器,它解释了一种非常糟糕的动态脚本语言,其语法非常笨拙,有时甚至是基于XML的。

    当您使用Python进行编程时,为什么要使用丑陋,糟糕的脚本语言,却要拥有漂亮,精妙的脚本语言呢?实际上,这是一个更笼统的问题:当您几乎使用任何一种语言进行编程时,为什么要使用Jython和IronPython来使用丑陋的,糟糕的脚本语言?

    因此,回顾一下:出于完全相同的原因,DI / IoC 的实践在Python中与在Java中一样重要。但是,DI / IoC 的实现已内置于该语言中,并且通常如此轻巧,以至于它完全消失了。

    (这里有一个简短的类比:在汇编中,子例程调用是一件很重要的事情-您必须将本地变量和寄存器保存到内存中,将返回地址保存在某个地方,将指令指针更改为要调用的子例程,安排它完成后以某种方式跳回您的子例程,将参数放在被调用者可以找到它们的地方,依此类推。IOW:在汇编中,“子例程调用”是一种设计模式,在诸如此类的语言出现之前内置了子例程调用的Fortran,人们正在构建自己的“子例程框架”。您会说在Python中子例程调用是“罕见的”,仅仅是因为您不使用子例程框架吗?)

    顺便说一句:让DI成为逻辑结论的示例,请看一下Gilad Bracha的Newspeak编程语言及其在该主题上的著作:

    2020-02-21 16:08:56
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载