2011-05-03 117 views
1

DI中的一個最佳實踐我在幾處讀過的不是注入對象B只是爲了獲取對象C,而是注入C來代替。直接注入直接的對象依賴關係或方法

但是,如果從C的單一方法是所有需要的,你會只注入該方法,而不是C?

如果是這樣,那麼如果需要C中的幾個方法呢?有沒有一點讓傳遞完整的對象更方便,並且承認你得到的東西你沒有興趣?

或者這一點表明,C類可能有太多不同的責任,需要提取到多個較小的類中,其中的對象然後可以注入沒有太多的行李?

不要害怕陳述明顯,這對我來說都是新的。

+0

如果很多類不需要大部分對象C,那麼對象C需要重構。順便說一下,最好的方法是通過Object C的接口(或抽象超類)進行注入。 – xandy 2011-05-03 03:34:48

+0

在面向對象的語言中,幾乎不會傳入方法:傳遞對象。你打算使用哪種語言和平臺? – Steven 2011-05-03 06:50:53

+0

PHP5.3。我第一次看到這種方法通過了http://blacksheep.parry.org/archives/diy-di/print/(Java)中的手動DI方法,我可以看到這個想法,但它有點像我的對象溶解。 – jontyc 2011-05-03 07:28:31

回答

3

如果依賴關係有更多的方法比你關心的還要多,這是一個很好的信號,它是一個Header Interface,違反了Interface Segregation Principle

如果你能控制接口,我建議將它分成幾個較小的Role Interfaces。如果您的具體實現更合理,您仍然可以擁有一個實現多個角色接口的具體類。

如果你不控制依賴關係的設計,我傾向於注入整個接口,因爲它仍然代表一個連貫的行爲集合(即使我們不同意原始的設計選擇設計師)。您稍後可能需要更多此類行爲。

+0

我會給這些參考一個閱讀,也許一些(良好的)OOAD書籍。乾杯。我現在給你打勾:) – jontyc 2011-05-04 10:49:58

相關問題