Re: [問題] 用C++實作反轉控制容器
※ 引述《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
02/21 11:02, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):