![]() |
AW: MVC -- Kommunikation unter Controllern?!
An Deinen Erkenntnissen würde ich gerne teilhaben :wink:
Ich z.B. möchte die Kommunikation via Messages lösen, habe allerdings das Problem das ich alle möglichen Messages empfange, nur meine eigenen nicht... :gruebel: Hast Du konkret eine Ahnung, wie ich die verschicken kann, damit ich sie auch empfange? Meine Controller sind von TComponent abgeleitet, haben ein Handle und ein Wnd_Proc, aber sind für meine messages taub. Gruß, Clemens |
AW: MVC -- Kommunikation unter Controllern?!
Zitat:
Ich habe mal die Idee von dem FinalBuilder umgesetzt. Da sieht das dann wie folgt aus: Message-Typ definieren:
Delphi-Quellcode:
Jetzt mal den Controller
unit Msg.Foo;
const MSG_FOO = $1000; // kann beliebig gewählt werden (muss aber ein Cardinal sein MSG_FOO_AKTION1 = MSG_FOO + $1; type TMsgFooAktion1 = packed record MsgID : Cardinal; Unused : array [1 .. 12] of Byte; Info : string; constructor Create( const AInfo : string ); end; implementation { TMsgFooAktion1 } constructor TMsgFooAktion1.Create(const AInfo: string); begin MsgID := MSG_FOO_AKTION1; Info := AInfo; end; end.
Delphi-Quellcode:
DIe Message wird nun wie folgt gesendet:
unit Ctrl.Foo;
uses Msg.Foo, MVC.ViewController; type TCtrlFoo = class( TMVCCustomViewController ) protected procedure DoMsgFooAktion1( var Message : TMsgFooAktion1 ); message MSG_FOO_AKTION1; end; implementation uses Dialogs; procedure TCtrlFoo.DoMsgFooAktion1( var Message : TMsgFooAktion1 ); begin ShowMessage( Message.Info ); end; end;
Delphi-Quellcode:
Die Unit
...
uses AppMsg, Msg.Foo; ... var lMsg : TMsgFooAktion1; begin lMsg.Create( 'Hello World!' ); Publisher.SendMessage( lMsg ); end;
Delphi-Quellcode:
ermöglicht den Zugriff auf den Publisher (als Interface), an dem sich die Controller anmelden
AppMsg
Delphi-Quellcode:
oder abmelden
Subscribe
Delphi-Quellcode:
.
UnSubscribe
Dieses An- und Abmelden erfolgt schon automatisch durch die Controller-Basis-Klasse. Sehr nett ist das vor allem im Hinblick darauf, dass man hierbei einfach diese Controller in die Luft erzeugen kann, und diese trotzdem a) mit den Messages erreicht und b) am Ende der Anwendung automatisch aufgeräumt werden
Delphi-Quellcode:
und der Controller ist einsatzbereit :) (bis auf die Tatsache, dass dieser ViewController keine View bekommen hat ;) )
TCtrlFoo.Create( nil );
Ich schicke nachher mal die Units hier hoch. |
AW: MVC -- Kommunikation unter Controllern?!
Zitat:
Zitat:
Außerdem wäre es schön, aus den Views heraus einfach messages auf dem bestehenden Weg zu schicken, eben ohne globalen Messenger (neben TApplication). |
AW: MVC -- Kommunikation unter Controllern?!
Nun es gibt einen globalen Messenger (per Default) der die Nachrichten für die Controls verschickt.
Jetzt baue ich einen weiteren parallel dazu, der die Nachrichten für/an die Controller verschickt. Hmmm, wieso ist denn jetzt der eine Messenger ok und der andere mit einem Geschmäckle? :gruebel: Der macht quasi nichts anderes ist aber für die Controller gedacht. Da wir ja View Controller und Model trennen wollen und die Views einen Messenger haben, die Models keinen brauchen ist es meiner Ansicht nach für die Trennung nur konsequent einen Messenger für die Controller zu haben. Und nur wenn der global ist, dann macht der auch Sinn, weil nur dann gewährleistet ist, dass ich alle Controller erreichen kann. |
AW: MVC -- Kommunikation unter Controllern?!
Zitat:
P.S. Die Models können das messagingsystem auch nutzen, um auf status/property änderungen aufmerksam zu machen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz