有人可以帮我解释为什么python上的静态方法对依赖注入有用吗?
我看到了这段精彩视频https://www.youtube.com/watch?v=E_kZDvwofHY,在45分45秒时,Thomas Wouters声称静态方法对DI很有用,但我无法理解为什么。
...
在开始撰写这篇文章后,我做了一些测试,我认为我得到了它。 一个例子:
class GreetPrint(object):
def pp(self, param):
print("Hello", param)
class User(object):
def __init__(self, param):
self.param = param
def print_user(self):
self.output(self.param)
@staticmethod
def output(msg):
return print_dependency.pp(msg)
print_dependency = GreetPrint()
a = User("Guido")
a.print_user()
这是一种比通过构造函数注入更好的方法(至少在Python中)?
答案 0 :(得分:0)
依赖注入是客户端向调用者提供调用者需要的东西的地方。
在您的示例中,看起来配置的依赖项是输出方法,在本例中为GreetPrint
在提供的示例中,User
和输出方法GreetPrint
之间存在紧密耦合。想象一下,如果我们被要求改变输出User
的方式。与全局范围中浮动的打印依赖关系紧密耦合。可以通过继承将不同的输出器应用于用户,但随后开始开发大型继承图和benefits of dependency injection and composition are lost。
在这种情况下,客户端没有为User
提供输出方法,用户只有一个输出方法GreetPrint
,并且客户端无法配置它。
现在设置它的方式看起来比将输出器注入构造函数要困难得多。
依赖注入可以通过编程到接口来建立,该接口消除目标在其依赖性上的耦合。在这种情况下,我觉得依赖于输出方法。
用户是否应负责输出自己?或者是否应该由推出者对用户采取行动?除程序必须输出的用户外还有其他类型的对象吗?