作者pracinverse (改)
看板C_and_CPP
標題Re: [問題] 用C++實作反轉控制容器
時間Tue Feb 21 00:10:07 2012
※ 引述《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