2017-04-01 131 views
0

有人可以帮我解释为什么python上的静态方法对依赖注入有用吗?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

依赖注入是客户端向调用者提供调用者需要的东西的地方。

在你例如它看起来像被配置的依赖是输出方法,在这种情况下GreetPrint

在提供的示例存在User和输出方法GreetPrint之间的紧密耦合。想象一下,如果我们被要求改变User的输出方式。与在全局范围内浮动的打印依赖关系紧密耦合。不同的输出器可以通过继承应用于用户,但是随后一个大的继承图开始发展并且benefits of dependency injection and composition are lost

在这种情况下,客户端不提供User输出方法,用户只有一个输出方法GreetPrint,并且它不能由客户端配置。

你现在设置的方式现在看起来比将输出注入到构造函数中要困难得多。

依赖注入可以通过编程到一个接口来建立,该接口消除目标对其依赖关系的耦合。我觉得这种情况下的依赖关系是输出方法。


用户是否应该负责输出自己?或者应该由外推者来操作用户?除程序必须输出的用户以外是否还有其他类型的对象?