Re: [問題] 用C++實作反轉控制容器

看板C_and_CPP作者 (改)時間12年前 (2012/02/21 00:10), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《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

02/21 00:42, , 1F
容器封裝成一個組裝元件, 還可以走向用控制檔決定
02/21 00:42, 1F

02/21 00:44, , 2F
可以算是你這個做法的抽象化
02/21 00:44, 2F

02/21 11:02, , 3F
能否給段sample code 說明這個容器的好處
02/21 11:02, 3F
文章代碼(AID): #1FGd1XBF (C_and_CPP)
文章代碼(AID): #1FGd1XBF (C_and_CPP)