Laden...

Wie kommuniziere ich mittels Events vom UI an die Geschäftslogik und halte das MVC-Pattern ein?

Erstellt von hussi22 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.103 Views
H
hussi22 Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren
Wie kommuniziere ich mittels Events vom UI an die Geschäftslogik und halte das MVC-Pattern ein?

Hey,
Ich programmiere grade ein GUI und komme nicht mehr weiter. Ich denke es fehlt mir da noch an Verständnis der Materie. Ich bin auch noch nicht so lange bei C# dabei.

Mein Problem:

Ich habe vor ein komplexeres GUI zu schreiben. Ich habe ein MainForm mit mehreren Usercontrolls die man durchschalten kann. Auf dem dem ersten Usercontroll sitzt ein FlowLayoutPanel und ein Button. Der Button ruft ein neues Usercontroll auf wo man Daten eingeben kann. Dort kann man wieder auf ein Button klicken der diese Daten dann als Object erzeugen soll und speichert.Dieses Object soll natürlich auch ein eigenes GUI(Usercontroll) besitzen und zum FlowLayoutPanel hinzugefügt werden. Sprich ich kann mehrere Objecte erzeugen die dann alle mit GUI zum FlowLayoutPanel gehören.

Mein Ansatz:

Ich erzeuge beim Click Event zum speichern der Daten das Object für die Logik nach dem MVC Pattern. Dieses Object mit der "Geschäftslogik" erzeugt dazu das Usercontroll im Konstruktor. Somit kann ich in der Logik Class auch alle Änderungen am GUI vornehmen. Das MVC Pattern sollte ich ja erfüllen. Ich habe ja beim Usercontroll in Visual Studio die normale .cs mit den Events(Controller). Die Designer.cs(View) und die normale Class für die Logik(Model). Ich hoffe soweit ist mein Verständnis vom MVC richtig?

  1. Frage
    Wäre das so gut? Oder sollte ich vielleicht das ganze mit Events lösen. Sprich das GUI hört nur auf Events von der Geschäftslogik? Jetzt würde ich ja nur in der Logik auf das GUI zugreifen und dort die Werte "durchreichen".
  2. Frage
    Wäre es so richtig das Usercontroll Object im Konstruktor der Geschäftslogik zu erzeugen?
    Ich könnte ja auch im Button Click Event erst das Object für die Logik erzeugen und dann direkt noch das GUI Object und die Logik Class als Parameter ans GUI übergeben.

Außerdem habe ich das große Problem das ich es nicht schaffe das Usercontroll dann auf das FlowLayoutPanel zu adden. Laut einiger Beiträge hier muss ich dafür ein Event nutzen. Da bin ich noch nicht so drin. Kann ich die MainForm direkt auf die von Visual Studio erzeugten Button Events der Usercontrolls hören lassen? Wie übergebe ich dabei das Object vom GUI ? Das "object sender" ist dabei ja nur das Usercontroll wo ich die Daten eingebe.. nicht das GUI für das Object ansich.

Ich hoffe ihr versteht mich und könnt mir helfen.
Ich bedanke mich schonmal bei euch. Danke 😛

16.842 Beiträge seit 2008
vor 5 Jahren

Wäre es so richtig das Usercontroll Object im Konstruktor der Geschäftslogik zu erzeugen?

Niemals.

Jetzt würde ich ja nur in der Logik auf das GUI zugreifen und dort die Werte "durchreichen".

Die Logik darf niemals auf die GUI zugreifen - egal von welcher Stelle.
Das wäre eine starke Verletzung der [Artikel] Drei-Schichten-Architektur

Schau Dir Reactive Extensions an.
Hier hört man auf Events (Subscriptions) und bindet Informationen an die UI (Observables).

H
hussi22 Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren

Ich muss gestehen das Reactive Extensions überfordert mich grade ein wenig.

Sprich ich würde das ganze mit Events lösen? Wenn was in der Logik Class passiert triggert es ein Event und dieses Event abonniere ich mit dem Usercontroll?
Wo würde ich denn das Usercontroll erstellen?

Und wie würde ich es dann schaffen das mein Usercontroll auch im FlowLayoutPanel anzeigt wird?
Vermutlich ebenso mit Events? Wie übergebe ich denn das Object des Usercontrolls an das FlowLayoutPanel?

Grüße

16.842 Beiträge seit 2008
vor 5 Jahren

Hilft Dir das in der Übersicht?
https://github.com/mrts/winforms-mvp

Gibt ja hunderte Tutorials zum MVP Pattern.