2009-02-05 68 views
2

我很難調和IoC,接口和事件。讓我們看看我能否在不寫書的情況下解釋這一點。IoC和事件

我剛剛開始使用IoC,我正在玩Spring。我們有一個簡單的數據層,它早在EF或其他人之前就已經建立起來了。其中一個類是具有一些方法和事件的DBProcedure。

我創建了'真正'DBProcedure類實現的IDBProcedure接口。在TDD方式中,我希望能夠爲實現相同接口進行測試的另一個「真正」DBProcedure類交換。對我而言,這意味着IDBProcedure接口應該定義在與我的數據層不同的命名空間/項目中,對吧?

但是DBProcedure可以引發一些事件,這些事件提供自定義的EventArgs派生類。這是否意味着EventArgs類需要在數據層之外定義?似乎它使界面工作,但這似乎不好,因爲它傳播數據層次?

另一方面,也許我有錯誤的想法 - 即使我沒有使用任何'真正的'類,當我測試以獲取接口和事件定義時,是否可以包含數據層命名空間?

回答

4

是的,您需要移動接口以及它所依賴的所有類型,因爲不需要希望接口模塊依賴於實現。

這種情況的典型的選擇是兩個備選方案

Impl ----> Api <---- client 

之一(實施取決於API,客戶端取決於API,一切都在API模塊)

Impl ----> Api <----- client 
\   |  /
\   V  /
    ------->Model<------ 

這裏大家取決於一個常見的「模型」模塊,它包含枚舉等。這個版本的優點是可以讓多個API模塊共享相同的通用枚舉和其他工件。 (因爲你真的不希望API通常依賴於其他API模塊)

+0

這是我需要知道的 - 非常感謝! – n8wrl 2009-02-05 17:54:14