AGB  ·  Impressum  







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

Trennung von GUI und Logik, wie geht ihr vor?

Ein Thema von divBy0 · begonnen am 19. Aug 2011 · letzter Beitrag vom 8. Dez 2017
Antwort Antwort
Seite 18 von 18   « Erste     8161718
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.769 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#171

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

  Alt 7. Dez 2017, 11:02
Hallo zusammen,

ich frage mal ganz ketzerisch, welche Vorteile bring es das GUI von der Geschäftslogik zu trennen?

Die Programmgeschwindigkeit ist es wahrscheinlich nicht, durch die Übergaben der Daten werden zusätzliche Befehle notwendig die die Geschwindigkeit des Programms verringert.

Besser Wartbarkeit? Ich weis nicht, wenn eine Datenbank-Anwendung um ein neues Datenbankfeld erweitern werden muss, so muss diese Änderung in allen Modulen berücksichtig werden.

Besser Testen? Man muss die Übergaben der Module zusätzlich testen, dass bedeutet erstmal Mehraufwand.

Man kann die GUI austauschen, wirklich? Entwickelt wurde für einen Destop-PC, jetzt soll das Programm auch auf Mobilgeräte laufen, auch hier kommt man nicht herum in den meisten Modulen eine Anpassung durchzuführen. Man braucht sich ja nur mal Windows 10 ansehen, wie es aussieht, wenn man versucht ein Destop-Programm auch für Mobilgeräte fit zu machen.

Ich finde das diese Entwurfsmuster auch dazu führen, dass man einfach drauflosentwickelt, man nennt das dann einfach „agil“ und schon ist alles OK.

Außerdem, für viele Probleme gibt es kein Muster, oder jedenfalls kein bekanntes Muster, entweder weil das Problem zu selten auftritt oder weil es jeweils ganz spezifisch im jeweiligen Kontext neu gelöst werden muss.

Dieser Beitrag soll nur zum Nachdenken anregen, weil man sich vor Extreme hüten sollte.

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

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

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

  Alt 7. Dez 2017, 12:03
Die Programmgeschwindigkeit ist es wahrscheinlich nicht, durch die Übergaben der Daten werden zusätzliche Befehle notwendig die die Geschwindigkeit des Programms verringert.
In gewissem Maße zu vernachlässigen - UI Code muss kein Highperformance Code wie auf nem 24/7 Server sein - natürlich sollte man hier keine Verzögerungen haben, dass die UI zäh wird.

Besser Wartbarkeit? Ich weis nicht, wenn eine Datenbank-Anwendung um ein neues Datenbankfeld erweitern werden muss, so muss diese Änderung in allen Modulen berücksichtig werden.
Auf jeden Fall, es geht darum, Zuständigkeiten zu trennen. Natürlich muss ich auch dann noch im Datenmodell, im Presenter/Controller/whatever und in der UI dafür sorgen, dass das neue Feld auch richtig funktioniert. Aber es ist klarer, wo und was ich ändern muss, als wenn alles ein großer Klump ist - und wir reden hier nicht von einfach nen Dataset, DataSource, Grid, fertig Anwendung - da würd ich auch kein MVC/MVP/MVVM praktizieren.

Besser Testen? Man muss die Übergaben der Module zusätzlich testen, dass bedeutet erstmal Mehraufwand.
Hier kommt ein Vorteil beim Einsatz eines Frameworks/Bibliothek zum tragen, das teste ich einmal und weiß, dass es funktioniert. Viele dieser Bibliotheken verfügen auch über Mechanismen zum Protokollieren, so dass man sehen kann, wenn irgendwo eine Verbindung fehlt oder nicht passt. Zudem gibt es noch einen Vorteil wenn man das sogenannte Convention over Configuration einsetzt (zugegeben, das kann zu Beginn schon arg "magic" sein) - aber es befreit von manuellem Anstöpseln der verschiedenen Teile.

Man kann die GUI austauschen, wirklich? Entwickelt wurde für einen Destop-PC, jetzt soll das Programm auch auf Mobilgeräte laufen, auch hier kommt man nicht herum in den meisten Modulen eine Anpassung durchzuführen. Man braucht sich ja nur mal Windows 10 ansehen, wie es aussieht, wenn man versucht ein Destop-Programm auch für Mobilgeräte fit zu machen.
Dein Vergleich hinkt. Bei der Entkopplung der Businesslogik von der UI kann ich mir für jede Plattform die UI so basteln, wie ich mag, aber wenn die Geschäftslogik (Validierung, triggern von anderen Komponenten, verbindung zur Datenbank, whatever) nicht direkt an die UI, ihre Events (kurz code behind, aka "onclick programmming") geklöppelt sind, dann kann man die so 1 zu 1 wiederverwenden.

Ich finde das diese Entwurfsmuster auch dazu führen, dass man einfach drauflosentwickelt, man nennt das dann einfach „agil“ und schon ist alles OK.
"Agil" heißt keineswegs einfach drauf los - aber das zu diskutieren, wäre besser in einem eigenen Thread aufgehoben.

Außerdem, für viele Probleme gibt es kein Muster, oder jedenfalls kein bekanntes Muster, entweder weil das Problem zu selten auftritt oder weil es jeweils ganz spezifisch im jeweiligen Kontext neu gelöst werden muss.
Bedingt. Wenn man sich mal näher mit Entwurfsmustern beschäftigt, wird man erstaunt sein, wo man sie überall wiederfindet oder auch "aus Versehen"/ohne es zu wissen selbst eingesetzt hat.
Aber dazu gehört auch zu wissen, wann man etwas anders machen muss, weil...

Dieser Beitrag soll nur zum Nachdenken anregen, weil man sich vor Extreme hüten sollte.
Da stimme ich dir uneingeschränkt zu - aber je mehr Möglichkeiten man kennt, desto besser kann man entscheiden, wie man etwas löst und wo man vom "Standard" abweichen muss.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
3.541 Beiträge
 
Delphi XE3 Ultimate
 
#173

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

  Alt 7. Dez 2017, 12:40
Die Trennung der Zuständigkeiten und die damit verbundene bessere Übersichtlichkeit des Codes finde ist das wesentliche Kriterium.

Wenn man das Alter einer Person anzeigen will, sollte man dieses nicht im Formular berechnen.

Besser ist es, dies in der Personenklasse zu tun und ein Label dann an dieses Property zu binden.
So muss man später nicht verschiede Stellen suchen, wo man eine entsprechende Berechnung durchgeführt hat.
In der Klasse kann man diese Berechnung jederzeit ändern, ohne dass das die GUI interessieren muss.

Soweit sollte das jedem einleuchten, der schon länger objektorientiert programmiert.

Selbst, wenn man die GUI nicht irgendwann mal austauschen oder Tests für die BL einrichten will, profitiert man von einer solchen Trennung.

Im Grunde ist diese Trennung schon vorhanden, wenn die BL komplett in einfachen Klassen läuft und die Formulare lediglich auf die Objekte zugreifen.

Wenn man sich den Klebecode sparen kann und ein Framework benutzt, wird das Ganze natürlich noch effektiver.

Die Bindung kann man dann direkt zwischen GUI und BL organisieren oder nochmal Controller dazwischen setzen, die die Daten nochmal überprüfen und aufbereiten.


Also es gibt viele mögliche Ausprägungen, aber wichtig und sinnvoll ist, dass die GUI niemals irgend etwas selbst tut, das strukturell eigentlich zur Geschäftslogik gehört. Dann ist das Projekt längerfristig sehr viel wartbarer.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
158 Beiträge
 
Delphi 10.1 Berlin Professional
 
#174

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

  Alt 7. Dez 2017, 13:11
Soweit sollte das jedem einleuchten, der schon länger objektorientiert programmiert.
Sollte. Leider ist dem nicht so.

Man muss ja nicht ins andere Extrem fallen wie an dem Code wo ich grad dran bin bei dem zwischen Anwender und DB ca. sieben Schichten liegen. (Wohlgemerkt bei einer Desktop-Anwendung)
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
1.990 Beiträge
 
Delphi XE3 Enterprise
 
#175

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

  Alt 7. Dez 2017, 21:15
Moin, die normale VCL Anwendung fördert die Trennung nicht wirklich. Denke das dies bei Windows Applikationen auch bis zu einem gewissen Grad vertretbar ist die Logik mit dem Formular zu verknüpfen, für Webanwendungen mit Webformular und serverside Execution geht es schlicht nicht.

Solange mit Delphi nicht ernsthaft Weboberflaechen entwickelt werden können, wird es wohl keine saubere Trennung geben.

Grüße in die Runde
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
5.732 Beiträge
 
Delphi 7 Personal
 
#176

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

  Alt 7. Dez 2017, 22:08
Moin, die normale VCL Anwendung fördert die Trennung nicht wirklich.
Das kann ich unterschreiben. Und wenn man dann ein zweites Programm mit der gleichen und dann noch zusätzlicher Funktionalität schreibt, fängt man an das erste Programm zu filetieren und nimmt sich vor es beim nächsten Mal gleich zu trennen, egal ob es zunächst einfacher erscheint oder nicht.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.023 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#177

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

  Alt 8. Dez 2017, 07:30
Moin, die normale VCL Anwendung fördert die Trennung nicht wirklich. Denke das dies bei Windows Applikationen auch bis zu einem gewissen Grad vertretbar ist die Logik mit dem Formular zu verknüpfen, für Webanwendungen mit Webformular und serverside Execution geht es schlicht nicht.

Solange mit Delphi nicht ernsthaft Weboberflaechen entwickelt werden können, wird es wohl keine saubere Trennung geben.

Grüße in die Runde
Das kann ich so nicht ganz unterschreiben. Auch in Webanwendungen kann man einen Teil der Logik an die Oberfläche binden. Mit Javascript nicht wirklich ein Problem. Andererseits hast du schon recht, das bei Webanwendungen eine stärkere Trennung vorhanden ist. Das liegt aber daran, das ich i.d.R. auch eine "physikalische Trennung" habe (eben Browser/Client und Server). Das erleichtert dann natürlich auch die Trennung von Gui und Logik.

Eine solche Trennung kann man aber genauso mit VCL oder mit jedem anderen Oberflächenframework bewerkstelligen.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
3.697 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#178

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

  Alt 8. Dez 2017, 13:30
Egal wie man etwas trennt... Eine Schichttrennung hat immer Vorteile.

Wer hat sich nicht schon mal geärgert das man die Datenbank X gegen eine andere Datenbank tauschen möchte oder auch nur andere Zugriffskomponenten (BDE zu FireDac z.B.)

Hat man je Formular zig Komponenten drauf geklickt ist das der Horror... Dann noch alle Verbindungen im Objectinspector zusammen geklöppelt und wahrscheinlich alle Felder oder Grids mit Datasets verknüpft... Oder noch schlimmer per LiveBindings...

Für ein Prototype mag das noch gehen, aber für eine Anwendung die ggf. sogar mehrere Programmierer pflegen sollen? Naja...

Alles in ein Form zu packen rächt sich sehr schnell...

Wer es so gemacht hat, soll doch mal eben von FireDac & lokaler Interbase Datenbank auf einen REST-Server / SOAP umstellen...

Ich tausche nur ein Interface im Model...

Mavarik
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
71 Beiträge
 
Delphi 10.1 Berlin Professional
 
#179

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

  Alt 8. Dez 2017, 13:47
Hat man je Formular zig Komponenten drauf geklickt ist das der Horror... Dann noch alle Verbindungen im Objectinspector zusammen geklöppelt und wahrscheinlich alle Felder oder Grids mit Datasets verknüpft... Oder noch schlimmer per LiveBindings...
Um das Verdrahten der Komponenten auf den Forms (selbst wenn mans mit der Controllerklasse verdrahtet in der PAS Datei) kommt man eigentlich nur drumrum, wenn man die Forms automatisch generiert, entweder zur Entwicklungszeit aus dem Datenmodell oder gar zur Laufzeit aus den aktuellen Daten.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
3.697 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#180

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

  Alt 8. Dez 2017, 13:57

Um das Verdrahten der Komponenten auf den Forms (selbst wenn mans mit der Controllerklasse verdrahtet in der PAS Datei) kommt man eigentlich nur drumrum, wenn man die Forms automatisch generiert, entweder zur Entwicklungszeit aus dem Datenmodell oder gar zur Laufzeit aus den aktuellen Daten.
Oder man bindet die Komponenten nur an propertys des ViewModels und brauch "nie" wieder etwas am Form ändern.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf