2013-03-21 31 views
7

對於我所見過的所有DI示例,我始終將依賴關係視爲其他類(如服務)。但是一個對象實際上可能依賴於配置值,比如字符串和資源包裝器(File/Path/URI/URL,而不是整個大值字符串/文檔或讀者)。DI設計模式的值對象是否有效依賴關係?

請注意,這僅僅是關於Java或C#語法中的DI設計模式,並非任何特定的DI框架如何處理此問題。

例如,假設我有這個類,它返回一個String(相對路徑,基於一些模糊的實現邏輯)。它(而不是其各種實現者)對「projectLocation」具有配置/初始化依賴關係,因爲用戶可以在他們的機器上擁有各種項目,並且該類在調用時會根據給定的項目執行一些邏輯。

public abstract class PathResolver { 

    protected File projectFilesLocation; 

    public RoutinePathResolver(File projectFilesLocation) { 
     this.projectFilesLocation = projectFilesLocation; 
    } 

    public abstract String getPath(String someValue); 
} 

我不使用DI只是單元測試(喘氣我甚至沒有單元測試,現有的項目)。我只是想分開我的依賴/創造性關注和邏輯關注時期。

+0

對於像我這樣一見鍾情的人,DI代表依賴注入(英文不是我的自然語言):) – LaGrandMere 2013-03-21 11:43:53

回答

3

假如你想注入的東西,例如文件位置,是類可以直接使用的東西,那麼注入它是完全有效的。

Object的情況下,如FileString那麼這與稱爲Service的東西沒有什麼不同。這是你的課程的一個相關性因此DI適用。

+0

但是另一方面,可以注入一個ConfigurationSettings接口,它執行返回所述String值的服務?也許從回購,配置文件或其他東西。會有區別。 – Zombies 2013-03-21 12:48:54

+0

你可以做到這一點,但恕我直言,一個ConfigurationSettings接口最終成爲上帝對象,你最終取決於它的一切。最好將每個類所需的特定配置直接注入到它中。也許如果你想要不同的文件加載方式,例如你可以用'FileFileProvider'和'LocalSystemFileProvider'實現'FileProvider'接口。 – James 2013-03-21 12:52:34

+1

這取決於。有一個具體的配置VO是完全正確的。例如'PathResolvedConfig'。當且僅當它專門爲該特定類(或接口,顯然)攜帶配置數據時。僅使用其中一部分數據的'ApplicationConfig' VO絕對是一個禁忌。 – Creynders 2013-03-21 13:45:56