AGB  ·  Datenschutz  ·  Impressum  







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

Trennung von Logik und Oberfläche

Ein Thema von banaguitar · begonnen am 29. Apr 2024 · letzter Beitrag vom 2. Mai 2024
Antwort Antwort
Seite 1 von 2  1 2      
banaguitar

Registriert seit: 19. Feb 2024
17 Beiträge
 
#1

Trennung von Logik und Oberfläche

  Alt 29. Apr 2024, 05:48
Hallo,

ich habe mal ein Mini-Beispiel-Projekt angehängt, da ich Probleme habe, die Logik von der Oberfläche zu trennen.
Mag vielleicht jemand mal reinschauen und verbessern? Das wäre cool.

Es geht einfach nur um eine (statische) Image-Komponente, auf der ich mittig einen Bitmap-Layer lege. Zur Berechnung benötige ich eine Hilfsfkt., für die ich die Höhe und Breite der Image-Komponente,
aber auch die Größe der Bitmap-Grafik benötige. Das alles von der Geschäftslogik zu trennen, damit habe ich meine Probleme.


Vielen Dank!
Angehängte Dateien
Dateityp: zip Sample-Project.zip (565,5 KB, 29x aufgerufen)

Geändert von banaguitar (29. Apr 2024 um 10:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Trennung von Logik und Oberfläche

  Alt 29. Apr 2024, 10:03
Alles (außer dem Dateinamen des Bildes) in dem Projekt ist Oberfläche und Oberflächenlogik. Die Geschäftslogik bestimmt (oder stellt der Oberflächenlogik bereit), was dann dort angezeigt wird. Die Geschäftslogik sagt aber nicht wie und auf welcher Komponente, kennt diese also gar nicht.

Allgemein:
Du solltest den Quelltext einmal formatieren lassen. (Ansicht --> Editor --> Quelltext formatieren, oder mit Strg + D)
So ist dieser nur schwer les- und überschaubar.

Am Handy kann ich den Quelltext gerade nicht konkret bearbeiten. Vielleicht hat ja jemand anderes konkrete Vorschläge, sonst schaue ich rein sobald ich kann.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
banaguitar

Registriert seit: 19. Feb 2024
17 Beiträge
 
#3

AW: Trennung von Logik und Oberfläche

  Alt 29. Apr 2024, 11:03
Danke für Deine Erklärungen! Ich habe den Code formatiert und neu hochgeladen.
Es wäre sehr nett von Dir und natürlich auch von allen anderen, die Lust haben, meinen Quelltext zu verbessern.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Trennung von Logik und Oberfläche

  Alt 30. Apr 2024, 09:13
Willkommen in der Welt von MVVM, MVC etc.

"Trennung von Oberfläche und Logik" sagt sich so leicht. :-/
Gehört die Anzeige des Bilds wirklich zur Logik? Ich sehe die Entscheidung, welches Bild angezeigt werden soll, in der Logik, aber die tatsächliche Anzeige eher bei der Oberfläche. Sonst läuft man Gefahr, Kopfstände zu machen, nur um die Oberfläche von allem anderen zu trennen und landet bei einer Logik, die eh dauernd auf der Oberfläche herumfummelt, nur halt indirekt.

Vielleicht sind diese Links informativ:
https://www.google.com/search?q=delphi+mvvm

Und dieser hier ist auch gut:
https://www.youtube.com/watch?v=virHepvMetw
  Mit Zitat antworten Zitat
banaguitar

Registriert seit: 19. Feb 2024
17 Beiträge
 
#5

AW: Trennung von Logik und Oberfläche

  Alt 30. Apr 2024, 10:30
Danke, ich finde das auch nicht so einfach zu trennen...
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Trennung von Logik und Oberfläche

  Alt 30. Apr 2024, 11:51
Hier nun mein Senf.
Also Trennung von UI und Logik finde ich recht einfach. UI ist in der .dfm und Logik in der .pas
Im Ernst: es kommt darauf an was man unter Logik versteht. Sebastian hat ja schon den Begriffe Oberflächenlogik und Geschäftslogik ins Spiel gebracht. Ich finde es wichtig alles zu trennen, wobei ich die Abtrennung der Geschäftslogik für wesentlich wichtiger halte.

Bei DDD wird aufgeteilt in UI, Domain und Infrastrukture.

Das was sich oben in Sample-Project.zip in der PosLayer.pas befindet ist etwas was ich der Oberflächenlogik zuordnen würde. Und das ist nach meiner Einschätzung schon recht gut. Das schlimmste für mich daran ist die Reihenfolge in bei den uses.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Trennung von Logik und Oberfläche

  Alt 2. Mai 2024, 14:09
Aus einer PM an mich (Auszug)

Zitat von banaguitar:
Hey Frank,
...
Was würdest Du mir raten?
...
Ich dachte, dass meine Antwort ggf. für alle interessant ist:

MVC/MVP war mir nicht „genug“ – daher habe ich mich für meine Projekte zu MVVM entschieden.
Ich habe mich seht intensiv mit diesem Thema beschäftigt. Mein Fazit:

1.) Wir programmieren nicht in C# und daher halte ich mich nicht zu 100% an die MS-Regeln für MVVM, weil ich einfach sage, dass man es mit Delphi besser machen kann. (Oje, ich höre schon den Aufschrei)
2.) Das Schicht-Model von MVVM muss eingehalten werden, wenn nicht geht alles schief. Das bedeutet auch eine klare aufgaben Trennung. Die View – die im eigentlichen nicht unserem Form entspricht, da ein Form mehrere Views haben kann sollte möglichst keinen Code enthalten. Da wir aber für unsere Forms „echten Code“ haben und nicht nur eine X(A)ML, sehe ich es nicht ganz so strikt. Beispiel OnDrawCell eines StringGrids.
3.) Sicherlich kann es für einen View mehr als ein Viewmodel geben. Ist aber aus meiner Sicht eher selten. Stellt aber i.d.R. kein Problem dar.
4.) Das Model ist übrigens nicht die Datenbank-Schicht, auch wenn das in vielen Tutorials so dargestellt wird.
5.) Man braucht für MVVM kein Framework! Ohne Framework ist es einfach viel mehr Arbeit und kann schnell unübersichtlich werden. Ist aber machbar.
6.) Ein Framework für MVVM zu schreiben ist nicht ganz einfach – ich kann ein Lied davon singen. Leider haben mich andere Aufgaben davon abgehalten meine #D.MVVM in Version 3.0 fertig zu stellen, daher arbeite ich immer noch in den verschiedenen Projekten mit meiner Version 1.0, 2.0 und 2.5 – wobei der Ansatz der 3.0 einfach das ist was „jeder“ braucht. Btw. Ggf. kommt etwas direkt in der RTL von EMBT. (Dazu gab es eine Frage im letzten Onlinebefragung)
7.) Änderungen an der View erfolgen mit einem Aufruf von PropertyChange mehr nicht (so der MS Ansatz). Das ist natürlich Quark. Dem Aufruf kann ich problemlose ein Integer mitgeben (Level 1), damit die View nur das aktualisieren muss was gefordert ist. Ich kann aber auch ggf. mit dem Integer einen Pointer übermitteln um in einem Rutsch auch direkt Daten mit zu geben. (Level 2). Level 3 wäre dann direkt über ein Framework und einer Vermittlerschicht den Setter einer Komponente auf zu rufen.

Meine Empfehlung – Start Simple.

View first. Also erst die View (Form) erzeugen. Die View erhält dann ein ViewModel (Property Injection)– die View darf ja das Viewmodel kennen, nur nicht umgekehrt.
Die View gibt dann dem ViewModel eine Call-Back Procedure:

Procedure PropertyChange(aWhat : Integer); In dieser Procedure ist eine große Case für die Integer Werte:

Delphi-Quellcode:
Case aWhat of
  0 : begin // Refresh All
      end;
  1 : EdName.Text := fViewModel.Name; // .Name ist eine Property vom Viewmodel.
...
end; // of case
usw. Natürlich kann man auch einen Aufzählungstyp nehmen, aber das war mir immer zu viel Arbeit. ggf. Konstanen für die Aufruf.

Delphi-Quellcode:
Const
  cRefreshAll = 0;
  cName = 1;
...

Delphi-Quellcode:
if fName <> aValue then
  begin
    fName := aValue;
    PropertyChange(cName);
  end;
Delphi-Quellcode:
{$SCOPEDENUMS ON}
Type
  TRefresh = (All,Nachname,Vorname,Strasse,Ort);
Für das Model geht es ähnlich.

Ich halte übrigens beim nächsten Kongress in Amsterdam mal wieder einen Vortrag zu MVVM.

Grüsse

Mavarik
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Trennung von Logik und Oberfläche

  Alt 2. Mai 2024, 14:37
Meine Empfehlung an banaguitar: Verwende NICHT MVVM. Eine simple Trennung von UI und Logik recht am Anfang.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Trennung von Logik und Oberfläche

  Alt 2. Mai 2024, 17:26
Meine Empfehlung an banaguitar: Verwende NICHT MVVM. Eine simple Trennung von UI und Logik recht am Anfang.
Nicht zielführend wenn einer UI und Logik trennen möchte.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Trennung von Logik und Oberfläche

  Alt 2. Mai 2024, 17:27
Das Thema ist schon recht komplex + die "simple Trennung von UI und Logik" gibt es mE leider nicht. Man muss ein paar weitreichende Entscheidungen treffen, wenn man beginnt, da was umzusetzen.

Was für mich schwierig umzusetzen war:
- Wie kommen die Daten ins Formular und zurück?
- Wie findet Validierung statt und wie wird die ans Formular gemeldet?
- Wie verarbeite ich Daten, die es NUR im Formular gibt (Drucken, Excport etc)?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:20 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