私はC++アプリケーションで適切なMVCを実装する方法について読んでおり、基本的にこれを実装するには2つの方法があるということになりました:
- オブザーバーパターン
- シグナル/スロット
ただし、どちらの場合も、私が読んだ例はすべて、サブジェクトが変更してオブザーバーに通知できる構造に従いますが、オブザーバーはサブジェクトを変更しません。この場合、いくつかの「問題」が発生します。
Text (モデルコンポーネント) と呼ばれるクラス、TextEditor (GUI コンポーネント) と呼ばれる別のクラスがあり、何らかの方法で「テキスト」を表示し、それを変更できるはずであり、「テキスト」を変更できる他のいくつかのクラスがあるとします。 .
そうです、オブザーバー パターンを使用して、'Text' をサブジェクトに、'TextEditor' をオブザーバーにします。大きな問題ではない。
「Text」が何らかの方法で変更された場合、Text は Text::notify() を呼び出し、TextEditor は変更を反映します。罰金。
では、 TextEditor を使用して Text を変更するとどうなるでしょうか。
「TextEditor」は「Text」について知っているので、textInstance.setText(...) のようなものを呼び出します...そして setText の最後で、「Text」は通知を呼び出し、「TextEditor」はそれ自体が行った変更を通知されます! 「Text」は、「TextEditor」以外のすべての人に通知を送信することさえできません。これは、オブザーバーについて知る必要がないためです。
パフォーマンスの理由は別として、これは正しくなく、「クリーン」ではないと感じています。これを実装するためのより良い方法があると思いますが、行き詰まっています。誰にもヒントがありますか?
事前に作成された C++ の実装に実際に目を向けているわけではありませんが、物事を正しく見る方法を理解することを目指しています。