我有一個包含一些成員,其可以從外部源被修飾的類:最佳實踐以設定(財產而)的單個/多個成員
class CNode
{
protected:
// these members might be changed by users
std::string m_sName;
CState m_CurrentState;
CColor m_DiffuseColor;
};
樣品被簡化,它具有多個成員在我的代碼中。
現在什麼是最好的做法是改變
- 單
- 多(一次)
- 所有成員(一次)
?
我的代碼需要處理所有情況,雖然內部情況1.將是通常的情況。 大部分時間它被應用到單個CNode,但它也可能被應用到一個節點陣列。
我知道兩個可能的解決方案,既沒有真正滿足我:
- 集&獲得每一個變量:
臨:
每個變量是可以修改的獨立於其他成員。
易於爲多個CNodes設置相同的值。
魂鬥羅:
很多集&gets;
如果添加一個新的變量,新的一組& get需要一併加入。
如果一個變量在許多CNodes改變這樣的工作最好
- 創建一個包含所有修改變量CProperties類:
臨:
一設置&獲取父類 - 屬性可以被添加/刪除而不需要修改set & get。
這也減少了我的API中處理用戶輸入的方法數量。
對比:
設置單個變量需要獲取當前CProperties,所以其他值不會被修改。
如果在單個CNode中同時更新多個/所有變量,這將工作得最好。
像這樣:
class CProperties
{
// these members might be changed by users
std::string m_sName;
CState m_CurrentState;
CColor m_DiffuseColor;
}
class CNode
{
public:
const CProperties* GetProperties();
void SetProperties(CProperties*);
protected:
CProperties m_Properties;
}
這將是最懶的版本(代碼創建工作),而且最討厭的版本對我來說,因爲設置單一變量,首先需要獲得當前屬性,修改單變量,然後將完整的屬性類設置回節點。
尤其是在修改多個CNodes中的單個變量的情況下,這似乎是一個糟糕的解決方案。
對我而言,執行時間和(大小)開銷大部分是無關緊要的。 (這實際上是我對付懶惰版本的唯一好辯)
相反,我正在尋找乾淨,可理解的可用代碼。
我可以想到動態方法的第三種可能的解決方案:
一組方法有一個對象作爲參數,可能包含一個或多個需要修改的值。然後,API只有一個設置方法,如果CProperty更改,則不需要進行任何修改。相反,在CNode類中需要解析方法。 對於CProperties中的每個更改,此解析方法仍需要更新,但我相信這應該也可以通過模板通過編譯器解決。
我的問題是:
有沒有其他可能的解決方案,我的用例?
哪種方法最明智?
感謝您的提示! 我也想過在屬性類中添加一個更新標誌,該標誌將指定哪些值應該更新。這些信息會在更新後立即變得無關緊要,因此我不想添加它。 但我沒有想到將它用作參數。 –
只是爲了澄清我的意思是一個更新函數,如下所示:void CNode :: Update();這將正確更新CNode,提供更新類所需的信息。 – Jonathan
更新課程所需的信息完全來自外部資源。所以我需要將更新後的CProperties以及CProperties中更新的內容傳遞給CNode :: Update()。 但是,通過這種方式,至少以前的CProperties的請求將變得沒有必要。 –