Ich habe darüber gelesen, wie man eine gute MVC in einem C++ Anwendung zu implementieren und kam im Grunde zu dem Punkt, dass es 2 Möglichkeiten, dies umzusetzen:C++ „bi-direktional“ Beobachter-Muster
- Beobachter Muster
- Signal/Slot
in beiden Fällen jedoch, die exemples ich alle eine Struktur folgen lesen, in dem das Thema wechseln kann und benachrichtigen sie Beobachter ist (s), aber der Beobachter ändert sich nie das Thema. Jetzt diese Fälle entstehen einige "Probleme".
Angenommen, ich habe eine Klasse namens Text (eine Modellkomponente), eine andere Klasse namens TextEditor (eine GUI-Komponente), die irgendwann 'Text' AND anzeigen kann und einige andere Klassen modifizieren kann ' Text 'auch.
Richtig, also verwende ich Beobachtermuster, mache 'Text' zum Thema und 'TextEditor' zum Beobachter. Keine große Sache.
Wenn Text in irgendeiner Weise geändert wird, ruft Text Text :: notify() auf und mein TextEditor spiegelt die Änderung wider. Fein.
Was nun, wenn ich den TextEditor verwende, um den Text zu ändern?
‚Texteditor‘ kennt ‚Text‘, so nennt es so etwas wie textInstance.setText (...) ... und am Ende des setText, ‚Text‘ Anrufe informieren und ‚Texteditor‘ wird mitgeteilt Eine Veränderung hat es sich selbst gemacht! 'Text' kann nicht einmal eine Nachricht an alle senden, außer 'TextEditor', weil es nicht von seinen Beobachtern wissen soll!
Ich habe das Gefühl, dass das nicht stimmt, nicht "sauber", auch aus Performance-Gründen asside. Ich würde wetten, es gibt einen besseren Weg, dies zu implementieren, aber ich stecke fest. Hat jemand Hinweise?
Ich bin nicht wirklich auf eine vorgefertigte C++ - Implementierung, aber mehr auf ein Verständnis, wie ich die Dinge richtig sehen sollte.
Sehr klar explananation, danke – Dinaiz