Laden...

Stimmt mein Ansatz von MVC bei C#?

Erstellt von ambientCS vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.930 Views
A
ambientCS Themenstarter:in
12 Beiträge seit 2010
vor 13 Jahren
Stimmt mein Ansatz von MVC bei C#?

Hallo,

Ich weiß es gibt Millionen von Webreferenzen zu MVC, doch gerade das macht es wohl so schwer eine Antwort auf meine Frage zu finden...

Grundsätzlich verstehe ich MVC, hab es auch in Java schon öfter verwendet.
Meine Frage ist: Ist mein folgender Vorschlag im Sinne von MVC bei C#?
-->

Bei Buttonklick in View wird ein Event getriggert. An dieses Event ist ein Delegate im Control gebunden, der daraufhin ausgeführt wird. Darin sagt Control dem Model was zu tun/ändern ist. Mein Model macht daraufhin seine Berechnungen. Nachdem das Model damit fertig ist löst es ein (Finished-)Event aus, an das wiederum ein Delegate der View gekoppelt ist. Die View führt also die Funktion dieses Delegates aus und erneuert sich somit.

Ist dieser Kreislauf also im Sinne von MVC?
Ich muss für die Uni ein Programm mit Model, Control und View erstellen, kann also nicht View+Control zusammenfassen, wie ich es schon oft gelesen habe.

Vielen Dank für eure Antworten!
Lg
ambientCS

2.082 Beiträge seit 2005
vor 13 Jahren

Hallo ambientCS,

aus meiner Sicht sollte das Model nichts berechnen. Das Model enthält nur die Daten.

Bei uns ist das so: Du klickst auf einen Button. Es wird eine Methode im Controller aufgerufen. Der Holt die spezifischen Models und bestückt dies mit Daten. Das Model hat dann z.B. die Eigenschaft Price, Amount und Total. Der Controller schreibt in Total dann Price * Amount und gibt dann den View zurück.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

U
282 Beiträge seit 2008
vor 13 Jahren

@ frisch

Naja, was ist das Model? Im MVC-Konzept sind ja View und Controller Präsentationsschicht, das Model also alles darunter. Insofern gehört natürlich die gesamte Business-Logik in das Model. Wo soll sie auch sonst sein. Inn der Präsentationsschicht hat sie nix verloren.

Dass man dann das M aus MVC in einer 3-Schichten-App nochmals aufteilt und die Business-Logik von den Daten trennt ist klar.

@ ambeintCS
Ja, das kann man so machen, ist IMHO ok.

Zwei Anmerkungen:

  1. Das Event von Model zu View könnte man durch DataBinding abbilden (strenggenommen auch ein Event, aber dennoch ein etwas erweitertes Konzept).
  2. Es gibt die Version des MVP, wo die View das Model nicht kennt. Dort würde dann der Controller auf das Event des Models hören und seinerseits die View updaten. Welches Konzept dir da besser gefällt, ist anwendungsspezifisch und Geschmackssache.

Viele Grüße,
Uwe

2.891 Beiträge seit 2004
vor 13 Jahren

aus meiner Sicht sollte das Model nichts berechnen. Das Model enthält nur die Daten.[...]
Der Controller schreibt in Total dann Price * Amount und gibt dann den View zurück.

Nein, nicht nach klassischem MVC. Dort enthält das Model sämtliche Logik. Der Controller kümmert sich rein um das "Mapping" von Usereingaben auf entsprechende Model-Methoden.
(Siehe auch FatController)

Gruß,
dN!3L

F
60 Beiträge seit 2010
vor 13 Jahren

Nein, nicht nach klassischem MVC. Dort enthält das Model sämtliche Logik. Der Controller kümmert sich rein um das "Mapping" von Usereingaben auf entsprechende Model-Methoden.

Sämtliche Business-Logik. Das MVC Pattern ist zwar allgemein bekannt, allerdings wird es sehr unterschiedlich ausgelegt. Nehmen wir mal folgendes an: Bei Klick auf Button B wird ein neuer Tab T in der View angelegt - wer würde nun über den Controller gehen um den Tab zu erzeugen?

Mein Model würde übrigens auch die gesamt Businesslogic beinhalten, da sonst M & C zu stark gekoppelt sind (meine Meinung).

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo ambientCS,

ich würde noch weiter gehen und bei normalen Windows-Forms-Business-Anwendung C und V gar nicht trennen, sondern die Aufgaben von beidem zusammen direkt in der Form-Klasse realisieren. Wichtig ist nur die Trennung von GUI und Modell.

herbivore

A
ambientCS Themenstarter:in
12 Beiträge seit 2010
vor 13 Jahren

Vielen Dank für eure schnellen Antworten!

@Uwe81: das mit dataBinding werd ich mir gleich ansehen! Hab das schon oft in Flex benutzt und fand das eigentlich ganz gut.

@herbivore: Wie gesagt, Vorgabe ist dass es M, V und C geben soll. Allerdings habe ich das mit View-Control Zusammenlegung schon so oft gelesen, dass ich mir gerne Pro-Argumente dazu anhöre...

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo herbivore,

bei normalen Windows-Forms-Business-Anwendung C und V gar nicht trennen

Kann das so angesehen werden dass in Winforms C die (Summe der) Eventhanlder sind?

Danke.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo ambientCS,

ein Windows Form ist quasi automatisch View und Controller in einem. Etwas vereinfacht gesagt sind die anzeigenden Controls das View und die EventHandler der Controller. Da der Code also automatisch in einer Klasse ist, bedarf es zusätzlicher, unnötiger Anstrengungen, das zu trennen, ohne dass man einen Vorteil davon hat. Insbesondere wenn man DataBinding verwendet, aber auch wenn nicht, haben in einer Windows-Forms Anwendung View und Controller normalerweise so wenig zu tun, dass es auch keinen Vorteil bezüglich der Übersichtlichkeit bringt, beides zu trennen. Man handelt sich in der Regel nur zusätzliche Redundanzen ein, ohne Flexibilität zu gewinnen.

Hallo gfoidl,

Kann das so angesehen werden dass in Winforms C die (Summe der) Eventhanlder sind?

jipp.

herbivore

A
ambientCS Themenstarter:in
12 Beiträge seit 2010
vor 13 Jahren

Ok, das klingt einleuchtend. Ich versuche das mal mit VC - M!