Einige Hintergrundinformationen:
Ein Kollege und ich haben unterschiedliche Interpretationen von MVC, was bedeutet, dass wir angesichts des gleichen Problems radikal unterschiedliche Lösungen finden. Er stammt aus einem Java-Hintergrund, in dem jede Komponente von MVC traditionell ein Objekt modelliert, und ich komme aus einem Haskell-Hintergrund und habe wenig oder keine Erfahrung mit OOP.
Der Problembereich:
Das Problem, das wir zu modellieren versuchen, verhält sich ein wenig wie eine Desktop-Umgebung. Wir haben eine Vorstellung von der Benutzersitzung (möglicherweise ihrem Login, ihrem Desktop-Hintergrund) und den Prozessen auf ihrem Desktop (z. B. iTunes, Finder usw.), die jeweils ihre eigenen Modelleigenschaften haben (minimiert usw.).
Wir sind uns in folgendem Punkt einig: Wir halten HMVC für die beste Vertretung. Wir sind uns einig, dass wir zwei MVC-Objekte haben Session
(Desktop) und Process
(Anwendung) und dass wir nicht möchten Process
, dass ein Objekt eine Vorstellung von Session
oder ein Backlink hat.
Sobald wir uns nicht einig sind, ist die Kernbedeutung von MVC und wie sich dies darauf auswirkt, wo wir die Liste der Prozesse auf dem Desktop des Benutzers aufbewahren .
Seine Interpretation:
Er argumentiert einen sehr gültigen Punkt, der traditionell einfach im Code und in unserem Rendering-System zu modellieren ist. Er sagt, dass die Liste der Prozesse eine Liste von ProcessController
Objekten sein sollte, in SessionController
denen sich ihre Modelle wiederum als separate Objekte befinden. Dies bedeutet , dass es eine erhebliche Menge an Staat innerhalb der beiden ist SessionController
und SessionModel
das ist relevant, was SessionView
braucht zu machen.
Dies scheint sehr im Einklang mit dem zu stehen, was wir in einer kurzen Suche im Internet lesen konnten.
Meine Interpretation:
Meine Interpretation erfordert die größte architektonische Änderung und scheint schwieriger im Code zu implementieren, aber ich glaube, dass sie konzeptionell korrekter ist. Ich möchte, dass jemand erklärt, warum dies nicht der Fall ist, oder ein anderes Modell (wenn nicht MVC) vorstellt, das mit dieser Interpretation übereinstimmt, und einige Stärken und Schwächen für beide Muster hervorhebt, damit wir die fundierteste Entscheidung treffen können (keiner von uns hat dies getan) ein starker Hintergrund in der Softwarearchitektur).
Ich sehe MVC als Triade mit drei austauschbaren Komponenten: der Model
, der Controller
und der View
. Dies stimmt mit dem überein, was ich im Internet lesen kann, und einige Quellen sagen Dinge wie "Ansichten, Controller und Modelle mit derselben Schnittstelle sollten zu unterschiedlichen Effekten austauschbar sein". Ich stelle mir das so vor:
- Wenn Sie das Modell austauschen, ändern Sie die Art und Weise, wie Daten validiert oder gespeichert werden
- Wenn Sie den Controller austauschen, ändern Sie , wie Sie die Seite verhält sich , aber nichts, das die c verändern könnten onceptual Dateninhalt der Seite
- Wenn Sie die Ansicht tauschen, ändern Sie die Art und Weise, wie die Seite angezeigt wird
Aus diesem Grund bin ich zu dem Schluss gekommen, dass bei einem Model
und View
nur beim Austausch des Controllers die Daten, die die Seite anfänglich rendert, nicht geändert werden sollten, da der Controller nur das Verhalten und nicht den 'Inhalt' der Seite ändern sollte. Ich denke, dies stimmt mit der konzeptionellen Visualisierung des Controllers als "Stationscontroller" in einem Schienensystem, einem Plan der Eisenbahn als Modell und der tatsächlichen physischen Manifestation und dem Erscheinungsbild der Gleise überein (z. B. in verschiedenen Geschmacksrichtungen). Real 'oder' Virtual 3D ') als Ansicht.
Hier sind wir uns nicht einig:
Ich behaupte, dass, da die Daten, die dem Benutzer in angezeigt werden, SessionView
durch die verschiedenen Prozesse auf dem Desktop geändert werden (ich modelliere die Prozesse als relevante Daten ), SessionModel
die Liste der Instanzen von enthalten sollte ProcessModel
. Dies bedeutet, dass die Verwendung eines beliebigen Zufalls SessionController
mit demselben SessionView
Konzept konzeptionell dieselben Daten anzeigen sollte (Prozesse auf dem Desktop).
Er argumentiert, dass es sinnvoller ist Model
, nie etwas über ein anderes Modell zu wissen. Dies bedeutet, dass das SessionController
eine Liste von ProcessController
s enthält und jedes Controller
Objekt einen Link zu seinem Modell hat. Bei a SessionView
und gleich, SessionModel
aber unterschiedlich sollten SessionController
die dem Benutzer angezeigten Daten radikal unterschiedlich sein.
Bitte argumentieren Sie für / gegen jede Interpretation und helfen Sie uns, das bestmögliche Ergebnis zu erzielen.
Vielen Dank für Ihre Zeit!