私はC++でプログラミングしていますが、これは設計に関する一般的な質問です。
1対1の関連付け関係にあるオブジェクトがある場合、それらの間に多くの一般的なメソッドが存在する傾向があり、本質的に内部クラスのメソッドを直接呼び出す定型コードにつながることに気付きました。
Tab
例として、タブとそれに対応するウィジェットを表すというクラスがあります。Tabbable
オブジェクトが継承できるというクラスもあるので、タブで表示できます。その後、 ATab
はこのTabbable
オブジェクトを取得し、それ自体を正しくレンダリングできます。これらのクラスには両方とも、たとえばタイトルやアイコンに関連する多くの類似したメソッドがあります。
class ITabbable {
public:
ITabbable();
virtual ~ITabbable();
virtual string getTitle() = 0;
virtual widget getContentWidget() = 0;
// etc...
}
class Tab {
public:
Tab(ITabbable* tabbableObject);
// lots of boilerplate code:
string getTitle() {
return m_tabbableObject->getTitle();
}
widget getContentWidget() {
return m_tabbableObject->getContentWidget();
}
// etc...
private:
ITabbable* m_tabbableObject; // association relationship
}
多くのコードが重複していて、不要のようです。を入れることができないため、継承はここでは確実に機能しませTab
んTab
。
これは私たちが対処しなければならないことですか?または、これらの状況を回避する方法はありますか?