AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MVVM Framework für Delphi

Ein Thema von mquadrat · begonnen am 1. Nov 2010 · letzter Beitrag vom 19. Jan 2015
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: MVVM Framework für Delphi

  Alt 18. Jan 2015, 15:36
@Phoenix

Also das Grundanliegen, gute Wartbarkeit (incl. ggf. Tests) zu erreichen, haben hier alle an der Diskussion Beteiligten sicherlich erkannt und vertreten das.

Für mich stellt sich nur die Frage, wie man am leichtesten dieses Ziel erreicht (ich bin schon ein fauler Sack ).

Man kann ja auch (so kam das in den Videos für mich rüber) ein ViewModel als Zwischenschicht einbinden, die quasi das Model 1:1 kapselt und dann wäre der Aufwand vollständig überflüssig.

Wenn das ViewModel zusätzlich bestimmte GUI-Statusinformationen oder GUI-Logiken bereit stellt (wie unser Sir das beschrieben hat) sieht das natürlich schon anders aus. Dann ist das durchaus sinnvoll.

In dem Fall stellt sich mir "lediglich" die Frage, ob sich das nicht mit weniger Aufwand erreichen ließe.

Die Frage ist also nicht OB man ein gutes Konzept durchhalten soll, sondern wie man das am besten organisiert.

Mein Wunsch wäre "Für den Programmierer so einfach wie möglich incl. Einhaltung einer guten Wartbarkeit und Scalierung und für den Endanwender eine attraktive GUI".

Ich hatte mich damals für Pascal/Delphi entschieden weil mir die Sprache und später die RAD-Entwicklung als ein einfacher Weg der Programmierung erschien. Natürlich lernt man dazu und die Anforderungen steigen. Aber möglichst einfach will ich es immer noch haben.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: MVVM Framework für Delphi

  Alt 18. Jan 2015, 19:07
Hier mal ein Beispiel zu einem simplen aber sehr effektiven Beispiel was man bei .net findet
http://www.codeproject.com/Articles/...ying-Recursion

Ein TreeView-Walker ... da hätte man auch selber mal drauf kommen können und hier der Delphi-Code dazu, der dem quasi 1:1 dem entspricht und auch so verwendet werden kann (der hier ist für FMX):
Delphi-Quellcode:
  TProcessNodeEventArgs = class( TEventArgs )
  private
    FNode: TTreeViewItem;
    FProcessDescendants: Boolean;
    FProcessSiblings: Boolean;
    FStopProcessing: Boolean;
  public
    constructor Create( ANode: TTreeViewItem );
    property Node: TTreeViewItem read FNode;
    property ProcessDescendants: Boolean read FProcessDescendants write FProcessDescendants;
    property ProcessSiblings: Boolean read FProcessSiblings write FProcessSiblings;
    property StopProcessing: Boolean read FStopProcessing write FStopProcessing;
  end;

  IProcessNodeEvent = IEvent<TProcessNodeEventArgs>;
  ProcessNodeEvent = Event<TProcessNodeEventArgs>;

  TTreeViewWalker = class( TComponent )
  private
    FTreeView: TTreeView;
    FStopProcessing: Boolean;
    FProcessNode: ProcessNodeEvent;
    function GetProcessNode: IProcessNodeEvent;
    function WalkNodes( ANode: TTreeViewItem ): Boolean;
  public
    constructor Create( ATreeView: TTreeView ); reintroduce;
    procedure ProcessTree;
    property ProcessNode: IProcessNodeEvent read GetProcessNode;
  end;

{ TProcessNodeEventArgs }

constructor TProcessNodeEventArgs.Create( ANode: TTreeViewItem );
begin
  inherited Create;
  FNode := ANode;
  FProcessDescendants := True;
  FProcessSiblings := True;
  FStopProcessing := False;
end;

{ TTreeViewWalker }

constructor TTreeViewWalker.Create( ATreeView: TTreeView );
begin
  if not Assigned( ATreeView )
  then
    raise EArgumentNilException.Create( 'ATreeView' );

  inherited Create( ATreeView );
  FTreeView := ATreeView;
end;

function TTreeViewWalker.GetProcessNode: IProcessNodeEvent;
begin
  Result := FProcessNode;
end;

procedure TTreeViewWalker.ProcessTree;
var
  LIdx: Integer;
begin
  FStopProcessing := False;
  for LIdx := 0 to FTreeView.Count - 1 do
    if not WalkNodes( FTreeView.ItemByIndex( LIdx ) ) or FStopProcessing
    then
      Break;
end;

function TTreeViewWalker.WalkNodes( ANode: TTreeViewItem ): Boolean;
var
  LArgs: TProcessNodeEventArgs;
  LIdx: Integer;
begin
  LArgs := TProcessNodeEventArgs.Create( ANode );
  try
    FProcessNode.Invoke( FTreeView, LArgs, False );
    Result := LArgs.ProcessSiblings;
    if LArgs.StopProcessing then
      FStopProcessing := True
    else begin
      if LArgs.ProcessDescendants then
      begin
        for LIdx := 0 to ANode.Count - 1 do
        begin
          if not WalkNodes(ANode.Items[LIdx]) or FStopProcessing then
            Break;
        end;
      end;
    end;
  finally
    LArgs.Free;
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#3

AW: MVVM Framework für Delphi

  Alt 19. Jan 2015, 06:08
Mein Wunsch wäre "Für den Programmierer so einfach wie möglich incl. Einhaltung einer guten Wartbarkeit und Scalierung und für den Endanwender eine attraktive GUI".
Naja, wer will das nicht

MVVM erschien mir dafür als geeignete Lösung. Allerdings legen wir alle neuen Projekte inzwischen als Web-App aus. Und bei der Überarbeitung von Legacy-Code hat man halt keine grüne Wiese.


@Stevie

Meiner einer wäre beim Bauen eines neuen Anwendungsframeworks dabei. Sofern wir dann über ein aktuelles Delphi verfügen. Mit XE2 - das wir aktuell einsetzen - macht das wenig Sinn.
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:46 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-2025 by Thomas Breitkreuz