Ich betrachte den MVC aus Sicht der Befehlszeile (nicht Web und kein Framework). Schön und einfach. das einzige, was mich verwirrt, ist der View-Teil davon? (Nun, es ist vielleicht nicht das einzige, aber es ist das wichtigste)
Vom IBM Standort aus hat die Sicht folgende Definition
Die Ansicht bietet die Vorstellung des Modells. Es ist der Aussehen der Anwendung. Die Aussicht kann Zugriff auf die Modell-Getter, aber es hat keine Kenntnis der Setter. Im Außerdem weiß es nichts über die Regler. Die Aussicht sollte sein benachrichtigt, wenn Änderungen am Modell auftreten.
Also wenn ich folgendes habe:
Modell
Anzeigen
Controller
Mein persönlicher Controller könnte ein Personenobjekt an die EditPeronDetails-Ansicht übergeben. Wie wird die Person jedoch von meiner Ansicht bearbeitet, wenn sie nicht auf ihre Setter zugreifen kann? Wie kann ich die Person bearbeiten?
Führt die View-Klasse auch nur eine Sache aus? dh kann ich eine Personenansicht haben, die Methoden zum Erstellen, Anzeigen, Löschen, Bearbeiten der Person enthält
vielen Dank
Knochen
Ist es wirklich notwendig, hier ein 3-Buchstaben-Akronym anzuwenden? wenn Sie müssen:
puedocode:
%Vor%definieren Sie ein abstraktes, aber einfaches MVC-Programm als:
%Vor%Verwenden Sie dann das Beobachtermuster (seit JDK 1.0 integriert, hier ), um die konkreten Klassen zu füllen:
%Vor%Die Hauptklasse, die nur ist, um die Komponenten zu erstellen und zu verbinden:
%Vor%Die Ausgabe dieses Programms ist:
%Vor%Ich bin mir nicht sicher, wie Sie das Konzept der Ansicht auf die Befehlszeile übertragen haben, aber ich werde versuchen, darauf zu antworten.
Mein persönlicher Controller könnte ein Personenobjekt an die
EditPeronDetails
-Ansicht übergeben. Wie kann ich die Person jedoch bearbeiten, wenn sie nicht auf ihre Setter zugreifen kann? Wie kann ich die Person bearbeiten?
Tut es nicht, der Controller tut es. Die Ansicht "erfasst" nur neue Werte und Aktionen und sendet sie an den Controller, der sie behandelt und das Modell aktualisiert.
Führt die View-Klasse auch nur eine Sache aus? dh kann ich eine Personenansicht haben, die Methoden zum Erstellen, Anzeigen, Löschen, Bearbeiten der Person enthält
Eine Ansicht kann mehrere Dinge tun. Zum Beispiel könnte ein Formular verwendet werden, um ein Domain-Objekt zu erstellen, zu lesen und zu aktualisieren (mit create and edit, ich meine Werte erfassen und an den Controller senden). Dies ist tatsächlich ein sehr häufiges Muster. Aber wie gesagt, es ist nicht die Sicht, die die Logik ausführt, sondern der Controller.
Also, um Ihre Frage zu beantworten, können wir uns vorstellen, dedizierte Methoden in der Personenansicht zu haben, um die Benutzereingaben zu erfassen und die Kommunikation mit dem Controller zu übernehmen, aber nicht für die CRUD-Logik (ich frage mich wirklich, wie Sie damit umgehen) Interaktionen mit dem Benutzer in der Befehlszeile, es scheint nicht wirklich praktisch für eine CRUD-Anwendung).
Ich arbeite daran, ein triviales CLI-Programm neu zu gestalten und habe mir eine ähnliche Frage gestellt.
Bei der Untersuchung ist offensichtlich, dass MVC und seine Derivate häufig missbraucht werden. Um die Dinge weiter zu komplizieren, existieren Variationen von MVC (Web MVC kommt in den Sinn), die sich nicht an die fast originale Smalltalk-80 Implementierung und Definition von MVC halten.
Das heißt, ich mag die Antwort von dfa mit einem Vorbehalt: Die Benutzereingabe sollte in der Steuerung platziert werden, nicht in der Aussicht. Seine Antwort stimmt eher mit dem Dolphin Smalltalk MVP-Muster überein als mit MVC.
"Der Controller ist eine Komponente, die auf Benutzereingaben wie Dateneingabe und Befehle reagiert, die von einer Tastatur oder Maus ausgegeben werden. Ihre Aufgabe ist es, als Brücke zwischen Mensch und Anwendung zu fungieren der Benutzer mit dem Bildschirm und Daten zu interagieren. " - Quelle
Als solche würde ich entfernen:
%Vor%aus der Ansicht und lassen Sie den Controller einfach wie folgt auf Eingabe warten:
%Vor%Um ehrlich zu sein, es fällt mir schwer, das als unbedingt besser zu rechtfertigen, aber ich dachte, ich würde es da rausschmeißen.
Tags und Links java model-view-controller