Autor Beitrag
doubleII
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Sa 04.02.17 19:35 
Hallo zusammen,

ich versuche es zu verstehen, wie man es besser / richtig machen kann?

Man erstellt eine GUI, wenn sie klein ist, es wird alles in Form1 eingepackt, passt alles.
Was passiert, wenn die GUI komplexer wird? Sollte man den Code in partialen klassen aufteilen?
Meiner Meinung nach, es wird unübersichtlich, nicht wahr?

Erstellt man neuen Klassen? Es klingt mir besser, ein Basis Klass -> Abgeleitete Klassen...

Beispiel:

Basis Klass (Form1) <---- Abgeleitete Klass (Form1Resize) <------ Abgeleitete Klass (GlobalXMLFile) ...

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new MyGui.GlobalXMLFIle());
}


hat es aber Sin? Ich habe nur eine GUI, erstelle keine hunderte GUI's.

Wäre nett, wenn jemand wir schreibt, was sollte man in diesem Fall vorgehen? Wenn man tausende Zeilen Code hat und möchte ihn in verschiedene Datei aufteilen?

Vielen Dank!

Schöne Grüße
doubleII
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 04.02.17 21:54 
Das Entscheidende ist, dass du die Logik von der GUI trennst. Wenn du das beachtest, hast du im Formularquelltext nur die Eventhandler der Komponenten usw., aber nicht mehr.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 05.02.17 10:28 
... und dort drin dann die Aufrufe der Logikmethoden ;-)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.02.17 11:23 
Richtig, das hätte ich vielleicht dazuschreiben sollen. ;-)
Die Logik selbst, die dort aufgerufen wird, kann dann in einer ganz anderen Quelltextdatei liegen.
doubleII Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: So 05.02.17 13:32 
also dann die Logic wird doch in weiteren partialen Klassen geschrieben, nicht wahr?
Ist es ein Problem, wenn man viele partiale Klasse (Dateien) hat, da tatsächlich die selbe
Klasse ist?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 05.02.17 13:45 
Zitat:
Ist es ein Problem, wenn man viele partiale Klasse (Dateien) hat, da tatsächlich die selbe
Klasse ist?


Technisch weniger. Aber was Wartbarkeit, Erweiterbarkeit, Testbarkeit etc. betrifft ist alles in eine Klasse zu packen (egal ob partiell oder nicht) Kategorie Katastrophe.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 05.02.17 14:04 
@doubleII: Verzichte selber auf partielle Klassen (diese wurden hauptsächlich nur für den Designer eingeführt - in .NET 1.x stand der Designer-Code noch mit in der vom Anwender gepflegten Form-Datei und wenn dieser dann [unabsichtlich] den Designer-Code verändert hat, konnte der Designer nicht mehr korrekt die Form anzeigen).

Im [Artikel] Drei-Schichten-Architektur wird noch ein bißchen mehr zum Hintergrund der Trennung erzählt.
doubleII Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Mo 06.02.17 13:22 
Danke. Jetzt verstehe ich. Wo kann man mehr über das Thema nachlesen?
Ich habe schon was gefunden aber es reicht mir noch nicht das Konzept bei Visual Studio umzusetzen: HowTo: 3-Tier / 3-Schichten Architektur

:)

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 06.02.17 14:46 
Das Beispiel ist doch schon recht detailliert? Was fehlt dir denn noch zu deiner Umsetzung?
doubleII Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Di 07.02.17 15:06 
was passiert, wenn man die xml Dateien, die in der 3. Schicht (Datenbank)abgelagert sind, etwas auslesen muss und in einer Textbox (1. Schicht GUI) anzeigen muss? Das ist schon bidirektionale Verbindung, nicht wahr?
Beispiel: beim Start der Software werden die Standardkonfigurationen aus der 3. Schicht die ausgelesen. Sorry


Zuletzt bearbeitet von doubleII am Mi 08.02.17 13:06, insgesamt 1-mal bearbeitet
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 07.02.17 20:23 
Zitat:
Das ist schon bidirektionale Verbindung, nicht wahr?

Bidirectional ist im Softwarebereich unüblicher Lingo und ich verstehe nicht worauf du hinaus willst bzw. wüsste nicht wie die Antwort (egal ob die als ja oder nein ausfällt) irgendwas erklären würde.

Zitat:
Beispiel: beim Start der Software werden die Standardkonfigurationen aus der 3. Schicht die ausgelesen.

Wenn ich versuche das in der Sprache des verlinkten Blogbeitrags beantworte dann fragt der Presentation Layer den Business Layer nach diesen Daten. Der Business Layer wiederum fragt den Data Access Layer danach. Der Data Access Layer gibt drauf hin die Daten an den Business Layer der wiederum die Daten an den ursprünglich danach fragenden Presentation Layer gibt.
doubleII Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Mi 08.02.17 13:46 
es wird gemeint, dass die Befehle nur in eine Richtung laufen dürfen, nicht wahr? Präsentation -> Logic -> Datenbank.
:(
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 08.02.17 14:03 
Zitat:
es wird gemeint, dass die Befehle nur in eine Richtung laufen dürfen, nicht wahr? Präsentation -> Logic -> Datenbank.


Ja so sollte es sein. Man drückt es meist so aus das eine Schicht die andere kennt aber nicht umgekehrt. Hier also darf Präsentation die Logik kennen um sie aufrufen zu können. Aber sobald Logic die Presentation Schicht kennt oder kennen muß läuft da was falsch.
doubleII Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Mi 08.02.17 16:54 
:)
Danke!
discipuli
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 103

WIn 10 64 Bit
Innosetup/Visual Studio 12
BeitragVerfasst: Sa 11.02.17 13:23 
Bei mir steht ein ähnliches, gleiches Problem an. Das habe ich gelesen: HowTo: 3-Tier / 3-Schichten Architektur
In Visual 2017 soll es Funktionen für "Refactoring" geben.
In unserm Hauptprojekt hat "Forms 1" über drei tausend Zeilen. Die sind auch noch in einander geschmiert.
Wo finde ich eine Anleitung zu diesem Thema? Bücher für 2017 gibt es noch nicht. Oder kennt jemand eines, in dem die Funktionen besprochen werden?

Discipuli

Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 11.02.17 14:34 
Unter VS2017 Release notes - C# und Visual Basic werden die neuen Funktionalitäten beschrieben (dies sind aber meist nur direkte Code-Änderungen).
Bei einer 3000 Zeilen Datei wirst du das meiste selber herauslösen müssen - der erste Schritt sollte die Erstellung neuer unabhängiger Logik-Klassen sein. Ich kenne aber auch Form-Code, wo alle Steuerelemente (z.B. TabControl, GroupBox, Panel) inkl. Unterelemente in dieser Formklasse stehen anstatt vernünftig dafür eigenständige Benutzersteuerelemente (UserContols) mit geeigneten Schnittstellen zu erstellen.