![]() |
AW: Trennung von GUI und Logik, wie geht ihr vor?
Zitat:
|
AW: Trennung von GUI und Logik, wie geht ihr vor?
Hallo,
vielleicht hilft Dir das Video zu weiteren Erkenntnissen. ![]() Bis bald Chemiker |
AW: Trennung von GUI und Logik, wie geht ihr vor?
Liste der Anhänge anzeigen (Anzahl: 2)
Moin...:P
Ein Minimalbeispiel entsprechend der Grafik... VIEW:
Delphi-Quellcode:
unit View;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Controller; // die View kennt eigentlich nur den Controller type TfoView = class(TForm) edtNumber1: TEdit; edtNumber2: TEdit; btnAddition: TButton; edtResult: TEdit; procedure btnAdditionClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FController: TController; procedure DoCalculateResult(Sender: TObject; CalculateResult: Single); public end; var foView: TfoView; implementation {$R *.dfm} { TfoView } procedure TfoView.FormCreate(Sender: TObject); begin FController := TController.Create; FController.OnCalculate := DoCalculateResult; end; procedure TfoView.FormDestroy(Sender: TObject); begin FController.Free; end; procedure TfoView.btnAdditionClick(Sender: TObject); // Command begin FController.Addition(StrToFloat(edtNumber1.Text), StrToFloat(edtNumber2.Text)); end; procedure TfoView.DoCalculateResult(Sender: TObject; CalculateResult: Single); begin edtResult.Text := FloatToStr(CalculateResult); end; end. CONTROLLER:
Delphi-Quellcode:
MODEL:
unit Controller;
interface uses Model; // der Controller kennt eigentlich nur das Model type TOnCalculate = procedure(Sender: TObject; CalculateResult: Single) of object; TController = class strict private FModel: TAddition; // oder die Klasse die alle Berechnungen implementiert (TCalculator) FOnCalculate: TOnCalculate; procedure DoCalculateResult(Sender: TObject; CalculateResult: Single); public constructor Create; destructor Destroy; override; property OnCalculate: TOnCalculate read FOnCalculate write FOnCalculate; procedure Addition(Number1, Number2: Single); end; implementation { TController } constructor TController.Create; begin FModel := TAddition.Create; FModel.OnResult := DoCalculateResult; // Event einhängen end; destructor TController.Destroy; begin FModel.Free; inherited; end; procedure TController.DoCalculateResult(Sender: TObject; CalculateResult: Single); begin // dem Controller das Ergebnis mitteilen...wenn benötigt if Assigned(FOnCalculate) then // Refresh / Notify updates begin FOnCalculate(Self, CalculateResult); end; end; procedure TController.Addition(Number1, Number2: Single); // Command -> Use begin // Prüfungen auf Gültigkeit nicht vergessen! :-) FModel.Calculate(Number1, Number2); end; end.
Delphi-Quellcode:
unit Model;
interface type TOnResult = procedure(Sender: TObject; CalculateResult: Single) of object; TAddition = class strict private FOnResult: TOnResult; FCalculateResult: Single; public property OnResult: TOnResult read FOnResult write FOnResult; procedure Calculate(Number1, Number2: Single); end; implementation { TAddition } procedure TAddition.Calculate(Number1, Number2: Single); // Use begin FCalculateResult := Number1 + Number2; if Assigned(FOnResult) then // Notify updates begin FOnResult(Self, FCalculateResult); end; end; end. |
AW: Trennung von GUI und Logik, wie geht ihr vor?
Hallo haentschman,
ich würde hier aber der View den Controller und dem Controller das Model nicht fest verdrahten, sondern jeweils per Konstruktor als Interface mitgeben. Damit bleiben die Klassen voneinander unabhängig. |
AW: Trennung von GUI und Logik, wie geht ihr vor?
Zitat:
|
AW: Trennung von GUI und Logik, wie geht ihr vor?
Zitat:
Die Erklärung warum man so was macht ist sicher gut. Allerdings ein Datenmodul als Basis zu nehmen halte ich für ... ... unschön |
AW: Trennung von GUI und Logik, wie geht ihr vor?
Zitat:
Zitat:
lg, jus |
AW: Trennung von GUI und Logik, wie geht ihr vor?
Bei 11:35 musst ich mir schon ein bisschen an den Kopf fassen - dass M-V-VM der gleichen Reihenfolge der Komponenten folgt wie sie auch M-V-C und M-V-P nutzen, darauf ist er nicht gekommen, oder? :wall:
Generell muss ich sagen, dass man das meiste Material zu MVVM aus der Delphiwelt in die Tonne kloppen kann, weil die meisten nicht verstehen, was der Kern von MVVM ist. Nur weil man UI von Businesslogik trennt macht man noch lange kein MVVM - in dieser Hinsicht ist das Video von Olaf schon eins der besten - dass ich seiner Implementierung und dem Argument, Delphi muss RAD sein, nicht ganz zustimme, steht auf einem anderen Blatt. Ob man nun MVC, MVP, MVVM oder LMAA macht ist am Ende fast wurscht und hängt auch von den eigenen Bedürfnissen und Vorlieben ab. Ich bin inzwischen der Meinung, dass MVVM in Delphi mehr Schmerzen als Freude macht - zumindest solange bis man sich ein mehr oder minder mächtiges Framework gebaut hat (etwas, was ich mal gestartet aber aufgrund verschiedener Gründe abgebrochen habe). Hier gibts einen kurzen aber guten Vergleich der gängisten Ansätze: ![]() |
AW: Trennung von GUI und Logik, wie geht ihr vor?
Wir verwenden schon seit Jahren MVVM mit einem selbstgebastelten FrameWork.
Ich stimme Stevie in fast allem zu. Fast - es macht auch mit FrameWork noch Schmerzen. |
AW: Trennung von GUI und Logik, wie geht ihr vor?
Setzt den jemand Daniel Teti's
![]() Womöglich gibt es da auch Ansätze als View statt auf einem WebModul auf eine Form zu gehen ? Ich habe da was von Messaging, etc. gesehen, was vielleicht auch ein gangbarer Weg wäre M V und C elegant zu entkoppeln und doch zu verbinden ... Rollo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 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