私はC++アプリケーションで適切なMVCを実装する方法について読み、基本的にこれを実現するための2つの方法があることをポイントに来てきた:C++「双方向」オブザーバーパターン
- オブザーバーパターン は、
- 信号/スロット
しかしながら、両方の場合において、私はすべての読み取りexemplesは、被験体は、それが観察者(S)の変革と通知することが可能な構造に従うが、観察者が被写体を変えることはありません。今、このケースはいくつかの "問題"を引き起こします。
Text(モデルコンポーネント)というクラスがあり、TextEditor(GUIコンポーネント)という名前のクラスがあります。これは、 'Text' ANDを変更することができるはずです。テキストも同様です。
右のように、私はオブザーバーパターンを使用しますので、 'テキスト'をサブジェクトに、 'テキストエディター'をオブザーバーにします。大きな問題ではない。
'Text'が何らかの形で変更された場合、TextはText :: notify()を呼び出し、TextEditorはその変更を反映します。ファイン。
TextEditorを使用してテキストを変更するとどうなりますか?
'TextEditor'は 'Text'を知っているので、textInstance.setText(...) ...のようなものを呼び出し、setTextの最後に 'Text'コール通知と 'TextEditor'それはそれ自身を変えた! 「TextEditor」以外のすべての人に通知を送ることさえできません。なぜなら、それはオブザーバーについて知っているとは思わないからです!
私はこれが正しいわけではなく、パフォーマンス上の理由でさえ「クリーン」ではないと感じています。 これを実装するより良い方法があると思いますが、私は立ち往生しています。誰もがヒントを持っていますか?
私はあらかじめ作られたC++の実装を本当に見ているわけではありませんが、どのように正しく表示されるべきかの理解を深めることができます。
非常に明確explananationを設定することにより、オートリフレッシュのテキストエディタ、ありがとうございました – Dinaiz