# Diskussion: MVC



## mischer (23. Feb 2007)

Hello, world!

Will heißen, Tach zusammen und ich freue mich nach relativ langer Abstinenz mal wieder einen Abstecher ins ehrwürdige java-forum machen zu können.

Da ich, im Rahmen meiner Diplomarbeit, momentan ein Art Grundsatzdiskussion mit meinem betreuenden Prof führe, wollte ich mir mal einige Meinungen Dritter zum betreffenden Thema einholen. Thema der Diskussion ist meine Interpretation des MVC. Dazu kurz einige Informationen zum Aufbau meiner Software:

Ziel der Software ist eine so genannte Hardware-in-the-Loop- oder Restbussimulation. Ich habe also ein elektronisches Steuergerät, das über einen Bus mit anderen Teilnehmern kommuniziert. Das Verhalten dieser anderen Teilnehmer habe ich also in Software realisiert und über besagten Bus mit der zu testenden Hardware verbunden. So weit, so gut. 

Um auf das Verhalten der simulierten Hardware einwirken; und die Reaktionen der angeschlossenen Hardware graphisch darstellen zu können, habe ich die Software um eine GUI erweitert. Diese habe ich – zumindest nach meiner Meinung – nach dem Vorbild des MVC realisiert. 

Der Viewer ist eine in Swing realisierte Oberfläche, der Controller vermittelt zwischen diesem und dem Model. Und genau dieses Model ist der Aufhänger der besagten Diskussion.

Als Model, das ja klassischerweise zur reinen Datenhaltung (z.B. in Form einer Datenbank) dient, fungiert in meinem Fall die komplette Restbussimulation. Somit ist es eben kein reiner Datencontainer, sondern eine komplexes Gebilde mit einer gewissen Eigendynamik, bedingt durch die Interaktionen zwischen den verschiedenen Busteilnehmern. Da ich jedoch nicht die Interaktionen selbst, sondern lediglich die Zustände und internen Daten der Steuergeräte darstellen will, halte ich es durchaus für möglich die Gesamtheit diese Zustände und Daten als – zugegeben sehr abstraktes – Datenmodell zu betrachten.

Mein Prof hält diesen Ansatz „für eine sehr freie Interpretation des MVC-Modells“, da ein Datenmodell „eigentlich immer eine Beschreibung von Daten und nicht von Abläufen“ ist.

Ich vertrete hingegen die Meinung, dass die Abbildung dieser Abläufe innerhalb des  Modells in keine Weise der Definition des MVC widerspricht. Grundlage für die Darstellung sind ja ausdrücklich nicht die Abläufe, sondern lediglich die Daten und Zustände der einzelnen Geräte. Dass die Logik jedes einzelnen Steuergerätes in diesem selbst realisiert; und somit Teil der Anwendung ist, halte ich im Sinne des OO-Gedanken für unerlässlich.

Da ich weder Aussagen gefunden habe, die diese Ansicht konkret unterstützen, noch solche die ihr strikt widersprechen, bitte ich Euch nun um Eure Einschätzung. Gerne nehme ich auch Verweise auf entsprechende Literatur entgegen.

Vielen Dank für Eure Hilfe!

Mit freundlichen Grüßen
mischer


----------



## nEp (27. Feb 2007)

Also soweit ich weiß gibt es keine ganz genaue Definition, wonach man sagt "Genau das ist MVC und das nicht". Ich würde schon sagen, dass das was du machst dem MVC-*Modell* entspricht. Ich habe auch mal in einem Buch gelesen (ich glaube Pattern orientierte Softwarearchitketur oder so), dass man unter dem Model einfach allgemein die Daten bzw. auch die Geschäftslogik für die Daten versteht. Das entspricht ja im Prinzip dem was du machst. Aber in einem anderen Buch steht das vielleicht wieder anders. Jedenfalls hast du ja deine GUI von deinen Daten usw getrennt, und das ist ja auch der Sinn vom MVC, da könntest du ja auch sagen, dass du dein Programm "MVC-artig" aufgezogen hast. Weil so wie ich das verstanden habe, geht es ja nur darum, ob man das was du gemacht hast nun wirklich MVC nennen kann oder nicht.


----------



## KSG9|sebastian (27. Feb 2007)

Was genau läuft in dem Datenmodell an Logik ab?
Wenn du einen "Controller" im Datenmodell hast dann passt das eher weniger zum MVC-Pattern.
Kannst du mal ein paar Codeausschnitte posten?
Dass du Logik im Modell hast ist nicht unbedingt falsch. Oftmals müssen die Daten aus der Datenbank irgendwie adaptiert werden um für deine Modelle sinnvoll zu sein, das ist aber wiederum kein Verstoß gegen MVC.


----------



## mischer (3. Mrz 2007)

Hi und vielen Dank ihr zwei!

Nachdem ich mir ne ganze Weile Gedanken über mein Projekt gemacht hab musste ich irgendwann feststellen, dass mein Prof doch mal wieder Recht behalten hat. Das was ich da macht hat nicht mehr wirklich viel mit dem MVC zu tun. Ich habe so viel Logik im Modell verbastelt, die von diesem allerdings auch untrennbar ist, das der eigentliche Controller nahezu nichts zu tun hatte. Ich habe restliche Logik nun auch noch mit ins Modell gepackt um die zumindest komplett in einem Modul zu haben. Demnach hat mein Controller nun nur noch die Aufgabe eines Vermittlers - ganz einsparen kann und will ich ihn dennoch nicht, da er noch immer Modell und Oberfläche sauber von einander trennt. Was ja eigentlich die Grundintension des MVC ist.

Ich habe mich daher für die Variante entschieden, die auch nEp bereits vorgeschlagen hat und betone, dass ich mich bei der Entwicklung an den Grundideen des MVC orientiert habe. Ich denke das kann ich ruhigen Gewissens behaupten.

@KSG9|sebastian: Codeausschnitte kann ich leider nicht posten, da es der renomierte, deutsche Automobilhersteller , bei dem ich diese DA geschrieben habe mit der Geheimhaltung äußerst genau nimmt. Nur soviel: Ich mache in dem Modell schon wesentlich mehr als Daten in irgendeiner Weise zu konvertieren. Es verändern sich darin Daten, ohne dass dies vom Viewer bzw. vom Controller initiiert wurde - also "von Geisterhand" wenn du so willst. Das Modell ist dabei ein Observable, in das sich der Controller als Observer einhängt. Auf diese Weise kann das Modell den Controller über Änderungen benachrichtigen.


Nochmals vielen Dank für Eure Meinungen

Gruß,
  mischer


Im Übrigen habe ich hier noch einen recht interessanten Thread übers MVC gefunden, der unter anderem deutlich macht, wie dehnbar das MVC ist bzw. wie unterschiedlich man das Ding interpretieren kann.        .oO( und ich dachte immer Flash-Programmierer produzieren nur dirty code :lol: )


----------



## Wildcard (3. Mrz 2007)

mischer hat gesagt.:
			
		

> Demnach hat mein Controller nun nur noch die Aufgabe eines Vermittlers - ganz einsparen kann und will ich ihn dennoch nicht, da er noch immer Modell und Oberfläche sauber von einander trennt. Was ja eigentlich die Grundintension des MVC ist.


Die Grundintention von MVC ist, dass das Model nichts davon weiß wie und von wem es angezeigt wird, was dazu führt das man ein und das selbe Model transparent auf verschiedene Weise anzeigen kann.


----------



## nEp (3. Mrz 2007)

Hm, also ich weiß natürlich nicht wie das jetzt bei dir aussieht, aber ich könnte mir vorstellen, dass das was du machst dem Prinzip des Document-Views (Variante von MVC) entspricht? 
Das ist halt so, dass es manchmal geschickter ist, den View und Controller sozusagen zu vereinigen. Ein Paradebeispiel dafür wären Texteditoren (View = Controller+View; Document=Model). Vielleicht hast du ja sowas? Wenn ich ne interaktive Anwendung entwickle setze ich eigentlich auch meistens Doc/View ein, und nicht das reine MVC. Ist IMHO oft einfacher und "direkter", hat aber halt den Nachteil dass die Eingabemöglichkeiten und die Informationsdarstellung nicht mehr voneinander unabhängig sind.
Aber wie gesagt, ist schwer zu beurteilen, ohne irgendwie Code oder sowas zu sehen.


----------

