何よりも、読んでくれてありがとう!
C++ でアプリケーションを開発していますが、設計上の問題についてアドバイスが必要です。説明させてください:
アプリケーションのメイン クラスにはいくつかのコレクションがありますが、他のクラスは最終的にそれらのコレクションの 1 つから値を取得する必要があります。このようなもの:
class MainClass {
private:
// Collections are internally implemented as QHash
Collection<Type1> col1;
Collection<Type2> col2;
};
class RosterUnit {
public:
RosterUnit() {
/* This method needs to get a specific value from col1 and
initialize this class with that data */
}
};
class ObjectAction {
public:
virtual void doAction() = 0;
};
class Action1 : public ObjectAction {
public:
void doAction() {
// This needs a specific value from col2
}
};
class Action2 : public ObjectAction {
public:
void doAction() {
// This needs a specific value from col1
}
};
私の最初のアプローチは、必要に応じてコレクション全体をパラメーターとして渡すことでしたが、2 つのコレクションを渡す必要があり、後で ObjectAction の別のサブクラスを作成し、他のオブジェクトから要素を取得する必要がある場合、ObjectAction サブクラスにはあまり適していません。コレクション (col3 と仮定) の場合、すべての ObjectAction サブクラスの doAction() シグネチャを変更する必要がありますが、これはあまり柔軟ではないと思います。また、Dialog があり、そこから RosterUnit を作成したいとします。RosterUnit を作成するためだけに、コレクションをダイアログに渡す必要があります。
次に、コレクションを指す RosterUnit と ObjectAction で静的変数を使用することにしましたが、その解決策にはあまり満足していません。柔軟性が足りないと思います。
私は設計パターンについて読んでいて、最初はget関数を備えたSingletonが良い選択だと思っていましたが、さらに調査した後、それは私の場合には適切な設計ではないと思います. グローバル変数を使用すると、より簡単になり、多かれ少なかれ同じになりますが、これは正しい方法ではないようです。
では、アドバイスをお願いできますか?
どうもありがとうございました!