Hallo,
seit ein paar Tagen bin ich nun dabei, die hier vorgeschlagenen Methoden der Kommunikation zwischen
GUI und Logik auszuprobieren. Dabei wird für mich immer deutlicher, dass eine absolute Trennung garnicht möglich ist, wenn die Logik während der Abarbeitung des Auftrages, der vom
GUI erteilt wurde, Informationen an das
GUI übermitteln bzw. Aktionen des
GUI auslösen soll. Die absolute Trennung funktioniert doch eigentlich nur, wenn ausschließlich der Rückgabewert einer Funktion ausgewertet werden soll.
Denn sowohl beim Absetzen von Windows-Messages als auch beim Feuern von Events muss die Logik doch wissen, wohin 'gezielt' werden soll, um eine bestimmte Aktion des
GUI auszulösen. Wie soll das gehen, wenn Logik und
GUI überhaupt nichts voneinander 'wissen'?
Hier meine Implementierung eines Update - Events, das tadellos funktioniert.
Die Deklaration in der Logik-Klasse sieht folgendermaßen aus:
Delphi-Quellcode:
type
TUpdateGUIEvent = procedure(Sender: TObject; index:Integer; s: string) of Object;
TGlExLogic = Class
private
FUpdateGUI : TUpdateGUIEvent;
Procedure UpdateGUI(Index:Integer; s: string);
[...]
public
property OnUpdateGUI: TUpdateGUIEvent read FUpdateGUI write FUpdateGUI;
End;
So wird das Event in der Logik-Klasse ausgelöst:
Delphi-Quellcode:
Procedure TGlExLogic.UpdateGUI(Index:Integer; s :string);
begin
If Assigned(FUpdateGUI) then
begin
FUpdateGUI(Self, Index, s);
end;
end;
Die Implementierung im
GUI sieht dann so aus:
Delphi-Quellcode:
procedure TGL4Mainform.FormCreate(Sender: TObject);
begin
GLMainLogic := TGlExLogic.create(self);
GlMainLogic.OnUpdateGUI := UpDateGUI;
end;
Procedure TGL4Mainform.UpdateGUI(sender:TObject; Index:Integer; s :string);
begin
case index of
1: Memo1.Lines.Add(s);
2: Memo2.Lines.Add(s);
8: label8.caption := s;
[...] usw.
end;
end;
Die Logik muss doch z. B.wissen, welche Parameter mitgegeben werden müssen, um bei einem bestimmten Control der Mainform ein Update auszuführen?! Es ist dann aber auch nie auszuschließen, das bei Änderung des
GUI das eine oder andere nicht mehr funktioniert.
Da wird man wohl notgedrungen Kompromisse machen und von der reinen Lehre der
OOP abweichen müssen. Oder habe ich da irgendwas nicht verstanden?
Gruß LP
PS:
Die oder
Das GUI? Nach den geltenden Regeln heißt es doch im Deutschen
das Interface? Oder doch nicht??