這是我第一次使用SOLID原則編寫C++代碼。因此我不知道下面的示例代碼是否正確實現了這些原則。我的問題遵循代碼。我是否正確實施SOLID原則?
我非常感謝所有回覆。謝謝!
下面是示例:
class ICustomer
{
public:
virtual char* GetName() = 0;
virtual char* GetSurname() = 0;
virtual char* GetAddress() = 0;
};
class CCustomer : public ICustomer
{
public:
virtual char* GetName()
{
return "Name1";
}
virtual char* GetSurname()
{
return "Surname1";
}
virtual char* GetAddress()
{
return "Address1";
}
};
class IExporter
{
public:
virtual void Export() = 0;
};
class CExportToExcel : public IExporter
{
public:
virtual void Export()
{
ICustomer* pCustomer = new CCustomer;
printf("%s, %s, %s\n", pCustomer->GetName(), pCustomer->GetSurname(), pCustomer->GetAddress());
}
};
class IShopOwner
{
public:
virtual void Execute() = 0;
};
class CShopOwner : public IShopOwner
{
public:
virtual void Execute()
{
IExporter* pExp = new CExportToExcel;
pExp->Export();
}
};
void main()
{
IShopOwner* pOwner = new CShopOwner;
pOwner->Execute();
}
問題:
- 它是一個有效的實體實施?如果不是,應該如何。
- 在樣本
ICustomer
有GetName()
,GetSurname()
和GetAddress()
。我想要一個額外的信息GetPhoneNumber()
。我應該把它放在哪裏?它會發生什麼變化? - 在示例中有
CExportToExcel
。現在我想要一個額外的類CExportToHTML
並使用它。我應該怎麼做?
類似地'ICustomer'實現應該通過構造函數或屬性注入'CExportToExcel'中。 – niksofteng
是的,正如我在我的答案的第一行中提到的那樣,適用於所有依賴關係。關於您通過屬性獲取依賴項的評論,我不會推薦。理想情況下,依賴關係應該通過對象構造函數進行,並通過Get only屬性公開。 (而不是Get/Set)。這樣,一旦在組合根上創建對象圖,就會知道它不會沿着執行流更改,並且依賴關係將保持只讀狀態。 –
我同意你的看法,而且我一直都喜歡構造函數注入。但是,我們不能否認這樣的事實,即有時候依賴項是可選的,並且您仍然可以在不依賴它的情況下初始化類,因爲您要在該類實例上執行的操作不需要該依賴項。那時應該考慮制定者/財產注入的時間。我很樂意知道你對此的看法。首先讓我+1你的答案,這很有用。 – niksofteng