我知道還有類似的問題Here但我認爲我的這個擴展了一點。在應用程序擴展性的預期中使用IoC容器
我最近一直在研究已經生產了大約一年的應用程序,沒有問題,也沒有真正的擴展計劃。該應用程序具有很少依賴性,並使用DI但沒有容器。
現在我正在將應用程序擴展到公司指令的更廣泛的範圍,這使我實現了使用IoC容器。這裏的問題是將一個容器添加到我之前認爲不需要的代碼的開銷。
我作爲我前進的具體問題是:
在規劃和編碼想必不會擴大小很多的應用程序,我應該實現的容器在期待那個場景,如這些可能存在自己和這樣的期待,我會更好地從一開始就實施一個容器,因此在擴展時已經存在框架。
如果在將應用程序擴展到超出其初始意圖時執行容器變得繁瑣,那麼這是設計不佳的標誌嗎?
編輯:
我使用固體原則(盡我的能力),並在我的應用廣泛的接口目前的問題是,更關係到在使用IoC容器,而不是DI的和它本身。前面提到的應用程序是一種自帶的DI樣式,我正在添加一個容器,問題出現在這個容器中。
我知道YAGNI會上來,這正是我引起這個問題的原因。我同意成本絕對是一個因素,但正如在其他答案中所述,將容器添加到小應用程序的開銷很小,我同意,因爲我以前做過這件事,而且它很簡單。在你看來,你會如何定義YAGNI的「需求」?沒有任何代碼需要*容器,但它肯定可以提高可管理性。否則,我完全同意你的第三段。如果實施成本高昂,您可以讓您的經理們思考如此長的時間。 –
就Yagni而言,如果我的項目沒有從某些方面獲得直接利益,那就不需要了。例如,DI使我的項目單元測試更容易。所以我需要它。容器不會授予任何額外的好處,因爲除了生產使用和硬編碼單元測試之外,我不需要切換實現。因此不需要添加容器。其他人可能有不同的要求,所以他們會針對各自的項目得出不同的結論。 – nvoigt
DI不僅有助於單元測試。它還有助於鬆散耦合和關注點分離。從用戶的角度來看,這不是直接的要求,但它們很重要。無論你需要一個容器是另一個問題,但我通常更喜歡經過測試和維護的解決方案,而不是你自己的。 – Kenneth