MVC in der Befehlszeile

8

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

  • Person

Anzeigen

  • EditPersonDetails

Controller

  • PersonController

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

    
dbones 14.12.2009, 22:59
quelle

4 Antworten

6

Ist es wirklich notwendig, hier ein 3-Buchstaben-Akronym anzuwenden? wenn Sie müssen:

  1. Der Benutzer sieht den Konsolenbildschirm, der die Ansicht (Textzeilen) anzeigt
  2. Der Benutzer tippt etwas in die Befehlszeile, was eine gerade von Ansicht ist
  3. controller ruft das -Ereignis ab, d. h. die Benutzereingabe
  4. Der
  5. -Controller macht etwas entsprechend und aktualisiert das Modell (Personen)
  6. controller teilt der Ansicht mit, dass sie neu streichen, d. h. mehr Zeilen drucken soll.

puedocode:

%Vor%     
irreputable 14.12.2009, 23:30
quelle
8

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%     
dfa 15.12.2009 00:36
quelle
1

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).

    
Pascal Thivent 14.12.2009 23:37
quelle
1

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.

    
Chase Miller 10.04.2014 01:10
quelle

Tags und Links