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
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
@ 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:
Viele Grüße,
Uwe
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
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).
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
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...
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!"
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