Zub*_*air 16 dependency-injection
我一直在阅读很多关于依赖注入的想法,认为它可能是一些非常先进的编程方式,但我看不出只是避免全局状态之间的区别,因为当没有全局状态时,你被迫传递所有依赖项对象.
有人可以向我解释,因为我认为我可能会忽略关于什么是依赖注入的问题?
die*_*dha 22
依赖注入是关于解耦代码.
当你通过传递参数来避免使用全局变量时,你正在解耦代码.您正在删除代码对全局变量的依赖性.
你可以将这种解耦概括为不仅仅是避免使用全局变量.请使用以下代码:
def foo(arg):
return ClassBar(arg).attr
foo(1)
Run Code Online (Sandbox Code Playgroud)
该函数foo是依赖于或紧密耦合 ClassBar.这不好的原因是你将被迫更新foo:
ClassBar变革的论据ClassBar别的东西attr从另一个对象访问如果代码被重写:
def foo(instanceBar):
return instanceBar.attr
foo(ClassBar(1))
Run Code Online (Sandbox Code Playgroud)
您已将耦合推送到呼叫者.这消除了对定义的依赖性foo.这使您无需foo在上述情况下进行更新.解耦的代码越多,您需要进行的代码更改就越少.
我对依赖注入的理解是你忽略了创建对象的细节,只声明需要这样的对象.例如,框架将在需要之前设置此对象.
所以这里的价值就是关注点的分离.这对于测试何时注入真实对象的模型非常有用.
| 归档时间: |
|
| 查看次数: |
4614 次 |
| 最近记录: |