2017-04-01 168 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,並且它不能由客戶端配置。

你現在設置的方式現在看起來比將輸出注入到構造函數中要困難得多。

依賴注入可以通過編程到一個接口來建立,該接口消除目標對其依賴關係的耦合。我覺得這種情況下的依賴關係是輸出方法。


用戶是否應該負責輸出自己?或者應該由外推者來操作用戶?除程序必須輸出的用戶以外是否還有其他類型的對象?