看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《ledia (下班後才下棋)》之銘言: : 如果 BusinessStuff 裡面會用到 DataLayer : 如果你把 dependency 寫死了 : 那在單元測試的時候就會很麻煩 : 而 inversion of control 的意思就在於 : 把這層 dependency 的關係拉出來給外界控制 : 這裡的 BusinessStuff 只認識 IDataLayer 介面 : 究竟 IDataLayer 是結合到真正的 DataLayer 還是 FakeDataLayer 呢 ? : 這個可以用 Resolver 來決定 感謝你的回復,如果他的功能只有這樣的話 那單純的多型不是也可做到相同的效果嗎?? interface IDataLayer { void DoSomething() = 0; }; class DataLayer : public IDataLayer { public: void DoSomething() { //do something } }; class FakeDataLayer : public IDataLayer { public: void DoSomething() { //fake do something } }; class BusinessStuff { IDataLayer* m_dataLayer; public: BusinessStuff(IDataLayer* dataLayer) { m_dataLayer = dataLayer; } void DoStuff() { m_dataLayer->DoSomething(); } }; void main() { IDataLayer* myDataLayer = NULL; bool bIsTest = false; if(bIsTest) { myDataLayer = new FakeDataLayer; } else { myDataLayer = new DataLayer; } BusinessStuff businessStuff(myDataLayer); bussinessStuff.DoStuff(); delete myDataLayer; } 那為何還需要這個複雜的容器?? 使用這個容器有什麼好處嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.240.129.36
ledia:容器封裝成一個組裝元件, 還可以走向用控制檔決定 02/21 00:42
ledia:可以算是你這個做法的抽象化 02/21 00:44
pracinverse:能否給段sample code 說明這個容器的好處 02/21 11:02