2009-07-04 46 views
4

我第一次在體系結構中引入了一個IoC容器。我正在尋找一個不應該用IoC容器做的。我想避免使用IoC容器的缺陷。我不想濫用或過度使用它。使用IoC容器時要避免什麼?

你可以幫我列出一些東西,以避免使用IoC容器?

我有項目我的名單上至今:

  • 不要讓每一個類訪問容器(不讓它公開辛格爾頓)。只有幾個頂級的類應該訪問容器。

回答

2

如果你必須制定一個IoC,我建議你看看http://docs.codehaus.org/display/YAN/IoC+Container

這裏有一些有趣的點

  • 最明顯的一個,容器不應要求業務對象 由它組裝起來實現任何 接口,繼承任何類,到 調用任何API。這可以避免對容器的依賴關係的直接 。
  • 容器不應要求業務對象符合任何 編碼約定,如「你有 揭露公共構造」,「你 必須將Java Bean的制定者」, 「你必須有一個方法名爲像 injectXXX」,‘你必須使用一個特殊的 註釋’等。這些限制 地方 容器上的隱含的依賴,因爲 程序員業務對象還是要 知道該做的和從不要的 集裝箱。

  • 不要依賴IoC對象中的任何IoC容器API 。使用IoC容器違反IoC原則 是一種悲劇 。

  • IoC容器 適用於彙編對象 在一起的代碼;它用於系統的配置 。畢竟,這不是針對業務對象的 。
  • 聲明API是更可取的。公開一個聲明式API而不是需要程序化編碼的API是很好的。
0

我會說不使用配置文件註冊類型,除非你絕對必須。它使重構變得困難,並且使用默認(非模擬)映射進行單元測試也更加困難。

+0

嗨NotDan,爲什麼這會讓單元測試更難以使用默認映射? – Sylvain 2009-07-08 21:26:51

+0

(至少使用.NET)您的測試項目的配置文件與應用程序配置文件(即MyApp.exe.config vs MyTest.exe.config)不同。由於您未使用實際使用的映射進行測試,因此您無法確定僅僅因爲測試通過,您的應用將按預期運行。 – NotDan 2009-07-08 23:14:02

4

也許這是比那種你正在尋找諮詢的更簡單的,但我的建議是:不要掛了容器上。

IoC是關於容器的1%,關於內部的組件是99%。他們是什麼讓應用價值 - 在另一方面,容器是基礎設施的垃圾;)

你應該能夠在您的應用程序最有效的方式來設計這些組件。

如果你在開始時似乎是一個很好的容器,沒有問題創造良好的包裹,乾淨,自然不嚴重依賴於容器API,那麼你在正確的軌道上的組件。

但是,如果您發現自己跳過箍環以將您的設計裝入容器中,並且您認爲問題不在於您的設計,那麼立即找到一個沒有限制影響您的容器,並且保持向前移動。

希望這會有所幫助!

尼克