MVC ist ziemlich einfach. Es gibt ein Modell, einen Controller und eine Ansicht. Wenn wir eine Website erstellen, wird alles zusammengeführt, wenn der Client eine REST-Schlüsselwortanforderung an den Server sendet -> der Server die angeforderte URL mit der Controller-Aktion übereinstimmt -> der dann die Modelle zur Datenerfassung / -verarbeitung aufruft und das Ergebnis erhält -> und gibt das Ergebnis als HTML-Seite (Ansicht) an den Client zurück .
Was ist, wenn es sich um einen reinen RESTful API-Webdienst handelt? Dann sendet der Ablauf so etwas wie ' Client sendet eine REST-Schlüsselwortanforderung an den Server -> der Server stimmt die angeforderte URL mit der Controller-Aktion überein -> der dann die Modelle zur Datenerfassung / -verarbeitung aufruft, das Ergebnis erhält -> und zurückgibt das Ergebnis zurück an den Client in JSON '. Wie zuvor, aber es gibt keine "Ansicht" ... oder besser gesagt, der generierte JSON kann als "Ansicht" betrachtet werden. In gewissem Sinne verwenden wir nur den MC-Teil von MVC. Ist es so, wie es gemacht werden soll? Oder gibt es andere, besser geeignete Muster für einen Nur-API-Dienst anstelle von MVC?
quelle
Ansicht ist eine Ebene, die für die Anzeige von Informationen verantwortlich ist, die von einem Benutzer / Client Ihrer Anwendung interpretiert werden können (dies bedeutet nicht, dass der Benutzer eine tatsächliche Person sein muss). JSON ist ein vollständig gültiges Format für eine Ansichtsebene. Computer verstehen das.
Solange die Ansichtsebene Informationen veröffentlicht, die von einem Benutzer verwendet werden können, um Modelle in Ihrer Anwendung zu beeinflussen, spielt es keine Rolle, wie die Ansicht aussieht. Es handelt sich dennoch um eine Ansicht, eine Ebene, die als Middleware zwischen dem Benutzer und dem System fungiert .
quelle
Martin Fowler würde dem vielleicht nicht zustimmen :
Weitermachen ...
OK, das ist ein bisschen verwickelt
MVC ist eine Sammlung von Ideen zur Implementierung von Benutzeroberflächen.
REST ist eine Sammlung von architektonischen Einschränkungen für die Erstellung umfangreicher Anwendungen.
Das Web, von dem Sie hier sprechen, ist eine riesige Dokumentenverwaltungsanwendung, die unter Verwendung der meisten dieser Einschränkungen erstellt wurde.
Die Ähnlichkeiten, die Sie zwischen den beiden sehen, werden (treffen Sie Ihre Wahl) falsch zugeschrieben oder oberflächlich.
RESTafarians haben ein gemeinsames Verständnis von HATEOAS , "Hypertext als Motor des Anwendungsstatus", und das sollte Alarme durch Ihren Kopf klingeln lassen - warum sollte eine Ansicht ein Motor des Status sein ? Wenn wir die Prämisse in Frage stellen und nach zusätzlichen Beweisen suchen, können wir auch zwei seltsame Dinge bemerken.
Erstens, dass wir den HTTP-Server vollständig aus der Gleichung entfernen können, indem wir den HTML-Code von der Festplatte laden. Der Browser ist damit vollkommen zufrieden und entschuldigt einige geringfügige Abweichungen im Verhalten, die sich aus der Änderung der Basis-URL ergeben können. Ansichten funktionieren im Allgemeinen nicht weiter, wenn sie vollständig vom Modell und vom Controller getrennt wurden.
Zweitens, wenn wir einen modernen Browser sorgfältig beobachten, werden wir feststellen, dass es mehrere Ansichten des HTML gibt. Mehrere Ansichten einer Ansicht scheinen eine wirklich seltsame Idee zu sein, aber es gibt sicher die Hauptpräsentation mit einer Reihe von Textmarkierungen, die auf Benutzergesten reagieren, und dann gibt es diese "Quellansicht", die den rohen HTML-Code anzeigt und auch darauf reagiert Benutzergesten. Es sind Schildkröten den ganzen Weg nach unten!
Die Antwort auf das Rätsel ist natürlich, dass der HTML-Code nicht die Ansicht ist. Die Sammlung von Widgets im Browser ist die Ansicht und steht in Verbindung mit dem Dokumentobjektmodell , das durch Lesen des HTML-Codes initialisiert wurde.
Mit anderen Worten, der HTML-Code ist eine Repräsentation des Staates, genau wie Roy T. Fielding es versprochen hat.
Richtiger wie zuvor: Es gibt keine Sicht. Der JSON ist genau wie der HTML-Code eine Darstellung des Zustands, die zum Überschreiten von Prozessgrenzen geeignet ist.
Denken Sie an "DTO" oder "Nachricht", und Ihre Schlussfolgerungen führen Sie viel seltener in die Irre.
quelle
Wenn Sie den JSON als Ansicht übergeben oder als Ansichtsmodell zum Erstellen der Ansicht verwenden, wird das Muster nicht verletzt.
Ich verwende dieselbe Architektur in der aktuellen Anwendung, an der ich arbeite, und sie funktioniert sehr gut. Zusammen mit einem netten JS-Framework können Sie einige wirklich reaktionsschnelle Designs erstellen.
Ehrlich gesagt keine Ahnung. Aber ich denke, dass es nicht so wichtig ist, ob Sie MVC in einer API verwenden oder nicht. Verwenden Sie alles, was Sie für bequem halten. Wenn es um Webdienste geht, müssen viel wichtigere Aspekte berücksichtigt werden (die nicht direkt mit MVC zusammenhängen), z. B. Sicherheit, Konsistenz, Verfügbarkeit usw.
quelle