2008-09-03 61 views
12

有沒有偏差?我現在幾乎感覺依賴它。每當一個項目超過一定的規模時,幾乎感覺到對標準模式的過敏反應,並立即將它與一個依賴注入框架重新連接起來。依賴注入成癮?

我發現的最大問題是剛剛學習它的其他開發人員可能會感到困惑。

另外,如果它是我使用的語言的一部分,我會感覺好多了。儘管至少對於Java來說,有一些非常好的輕量級庫。

想法?不好的經歷?或者停止擔心它?


[編輯]回覆:依賴注入的說明本身

對不起爲是含糊。 Martin Fowler可能比我所能描述的更好......無需浪費精​​力。

巧合的是,這證實了一點,即它還沒有被廣泛實踐,並且如果每個人都沒有及時加入團隊,與團隊合作可能會成爲障礙。

回答

1

唯一的缺點我能想到的就是通過不斷的虛擬電話:)微小的性能降低

+0

也許微小應該是72點字母和大膽? – 2012-06-11 14:50:24

2

您可以添加一個或兩個鏈接解釋什麼依賴注入實際上是,對於我們這些在家裏一起演奏? wikipedia article是有趣的,但不是很有啓發性。

+4

@Finglas,應該是這樣的,但是這個答案在評論實施之前就已經完成了。 – Blorgbeard 2011-02-13 14:07:23

3

在我看來,主要的缺點是學習曲線(正如你指出),併爲潛在的增加了抽象,使其更難以調試(這也是學習曲線的一部分)。

對我而言,DI似乎更適合於大型複雜系統 - 對於小型的一次性應用程序,它可能會導致應用程序架構過度,基本上,架構需要更多的開發時間堅持比它能夠彌補的價值提供的更多。

4

我是IO大娘,但是我看到一些沒有人理解的巨大XML配置文件的項目。所以要注意用xml編程。

+0

通過XML進行依賴注入是Java程序員最大的罪惡,至少對我來說是這樣。它使調試變得困難,難以理解,難以維護,並且通常會使代碼變得非常難看 – nflacco 2013-01-28 20:15:50

3

就不用擔心它的最好的文章之一。我認爲,IoC技術對於大多數開發者來說將是第二天性。我正在努力在這裏教授開發人員關於它的事情,我發現很難傳達信息,因爲它對我們一直做事情的方式感覺非常不自然,這恰恰是錯誤的方式。另外,IoC新手和我發現的新項目的開發人員都遇到了更多困難。他們習慣於使用IDE來追蹤依賴關係,以瞭解整個事物如何「掛在一起」。這些信息通常寫入奧術XML。

4

此外,如果它是我使用的語言的一部分,我覺得它會好很多 。

僅供參考如果您需要輕量級,簡單的依賴注入,然後使用它,那麼在JDK 6中有一個非常簡單且功能強大的依賴注入。

使用基於一類ServiceLoader類,你可以請求服務(或服務的許多實現):

package dependecyinjection; 
import java.util.ServiceLoader; 

public abstract class FooService { 

    public static FooService getService() { 
     ServiceLoader<FooService> loader = ServiceLoader.load(FooService.class); 

     for (FooService service : loader) { 
      return provider; 
     } 

     throw new Exception ("No service"); 
    } 

    public abstract int fooOperation(); 

} 

package dependecyinjection; 
public class FooImpl extends FooService { 
    @Override 
    public int fooOperation() { 
     return 2; 
    } 
} 

怎樣的ServiceLoader定義返回的服務實現?

在項目文件夾中創建一個名爲META-INF /服務文件夾,並創建一個名爲dependencyinjection.FooService文件。該文件包含指向服務實現的一行。在這種情況下:依賴注入.FooImpl

這還不是廣爲人知。

+4

這種模式不是稱爲「服務定位器」而是「依賴注入」嗎?請參閱http://www.martinfowler.com/articles/injection.html獲取兩者的描述。 – 2009-04-29 01:49:19

+0

使用這種模式會導致開發人員瘋狂時,他們必須爲服務隱藏的依賴關係...... – mathieu 2012-07-31 09:55:30

5

我有DI的問題是同樣的問題,我有一個COM,並與看起來像任何代碼:

i = GetServiceOrInterfaceOrObject(...) 

的問題是,這樣的系統不能從代碼可以理解。在[else]中必須有文檔定義服務/接口/對象X可以請求哪些服務/接口/對象。該文檔不但必須保留,而且可以像源代碼那樣容易地獲得。

除非文檔寫得很好,否則通常很難看到對象之間的關係。有時候,關係是暫時的,這使得他們更難以發現。

我喜歡KISS的原則,我堅信使用正確的工具來完成這項工作。如果給定項目的DI的好處超過編寫可理解代碼的需要,那麼比使用它更好。