AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Trennung von GUI und Logik, wie geht ihr vor?
Thema durchsuchen
Ansicht
Themen-Optionen

Trennung von GUI und Logik, wie geht ihr vor?

Ein Thema von divBy0 · begonnen am 19. Aug 2011 · letzter Beitrag vom 30. Jan 2018
Antwort Antwort
Seite 13 von 19   « Erste     3111213 1415     Letzte »    
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#121

AW: Trennung von GUI und Logik, wie geht ihr vor?

  Alt 28. Nov 2017, 21:31
Bei diesem einfachen Beispiel würde mich interessieren wie man sowas unter Delphi 2007 löst.
Mit einer Klasse (TRechner).
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#122

AW: Trennung von GUI und Logik, wie geht ihr vor?

  Alt 28. Nov 2017, 22:55
Hallo,

vielleicht hilft Dir das Video zu weiteren Erkenntnissen.

https://www.bing.com/videos/search?q...2F&FORM=VRDGAR

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#123

AW: Trennung von GUI und Logik, wie geht ihr vor?

  Alt 29. Nov 2017, 09:09
Moin...
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:
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.
MODEL:
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.
Miniaturansicht angehängter Grafiken
mvc.png  
Angehängte Dateien
Dateityp: zip MVC.zip (2,4 KB, 12x aufgerufen)

Geändert von haentschman (29. Nov 2017 um 09:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#124

AW: Trennung von GUI und Logik, wie geht ihr vor?

  Alt 29. Nov 2017, 09:26
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.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#125

AW: Trennung von GUI und Logik, wie geht ihr vor?

  Alt 29. Nov 2017, 09:32
Zitat:
Ich würde hier aber der View den Controller und dem Controller das Model nicht fest verdrahten
...viele Wege führen nach Rom. Mir ging es nur um das Prinzip entsprechend der kleinen Grafik...
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#126

AW: Trennung von GUI und Logik, wie geht ihr vor?

  Alt 29. Nov 2017, 09:42
Hallo,
vielleicht hilft Dir das Video zu weiteren Erkenntnissen.
https://www.bing.com/videos/search?q...2F&FORM=VRDGAR
Bis bald Chemiker
Da geht es um MVVM und nicht um MVC (was ja nicht schlecht sein muss.)
Die Erklärung warum man so was macht ist sicher gut.
Allerdings ein Datenmodul als Basis zu nehmen halte ich für ... ... unschön
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#127

AW: Trennung von GUI und Logik, wie geht ihr vor?

  Alt 29. Nov 2017, 14:44
Hallo,

vielleicht hilft Dir das Video zu weiteren Erkenntnissen.

https://www.bing.com/videos/search?q...2F&FORM=VRDGAR

Bis bald Chemiker
Vielen Dank! MVVM interessiert mich genauso. Das Video hat mir auch sehr geholfen.

Moin...
Ein Minimalbeispiel entsprechend der Grafik...
...
Vielen Dank für das Beispiel, das werde ich mir heute am Abend genauer anschauen.

lg,
jus
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#128

AW: Trennung von GUI und Logik, wie geht ihr vor?

  Alt 29. Nov 2017, 15:01
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?

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: https://stackoverflow.com/a/5124291/587106
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#129

AW: Trennung von GUI und Logik, wie geht ihr vor?

  Alt 29. Nov 2017, 17:14
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.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#130

AW: Trennung von GUI und Logik, wie geht ihr vor?

  Alt 29. Nov 2017, 18:24
Setzt den jemand Daniel Teti's DMVC ein, was ist davon zu halten ?

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 13 von 19   « Erste     3111213 1415     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz