我有遺留代碼,其中包含許多其他子類作爲數據成員的類。其中大部分內容以不同的輸入讀入子類中的數據成員。它看起來像這樣:初始化主構造函數中的子類 - 主構造函數體與子類構造函數體
MainClass::MainClass(std::string &directory, LogClass &logClass, int mode1, int mode2, int mode3,) :
logClass(logClass),
subClass1(directory, logClass, mode1),
subClass2(directory, logClass),
subClass3(logClass, subClass1, subClass2, mode1, mode2),
subClass4(logClass, subClass1, subClass2, subClass3, mode1, mode2, mode3),
{
if(mode2 == 0)
{
subClass3.init();
}
subClass4.init();
}
在一些子類中,初始化發生在其構造函數的主體中。在其他時候,重要數據成員的初始化發生在mainClass的主體中,如subClass3和subClass4的情況所見。
我正在改變這段代碼以包含處理先前讀入數據的轉換的其他子類。其中一些新類需要在構建其他類之前進行初始化。例如,如果我添加subClass5,它可能需要運行subClass4.init()。但是從代碼中可以看出,subClass4.init()不會在構造函數的主體中運行。
這裏有什麼好的政策可以推進?我是否應該將子類構造函數中的所有初始化引出到它們自己的init()函數中,並在主類構造函數中對它們進行正確的排序?或者我應該將所有初始化都移動到子類的構造函數和托盤中並正確地對它們進行排序?
我想弄清楚這個問題最適當的代碼設計。
如果這個例子反映了遺留代碼,我會考慮重構它。每當我看到「模式」參數時,我都覺得應該通過分類來完成,或者 - 最好 - 通過使用策略或類似的模式。 – Jens