Verwenden Sie die client-side MVC/MVVM-patterns und MVC-server-side-Muster
Anbetracht der beliebtesten MVC/MVVM-client-side-Muster (wie Knockout.js, Angular.js, Ember.js, und andere), habe ich einen großen Zweifel:
Auch unter Berücksichtigung der Modellierung von Redundanz auf beiden Seiten, , was die Vorteile und disvantages diese verwenden, um client-side MVC-Muster mit server-side-Muster?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kämpfte ich mit, wie diese Frage zu beantworten... hoffentlich hilft, auch wenn es in einer Runde über Weg.
Während einige vor - /Nachteile wurden bereits erklärt, ich denke, der beste überblick in diese Antwort.
Für mich der größte Vorteil der Verwendung von client-seitige Logik wird die rich-UI-Aspekt.
Aber der Schlüssel Teil Ihrer Frage zu sein scheint-Modell "Redundanz" (würde ich es nennen, duplizierte Logik, oder zumindest ein Potenzial für duplizierte Logik). Meiner Meinung nach, dass ist ein problem, das möglicherweise existieren, unabhängig von der vor - /Nachteile im vorherigen link.
Also zu aller erst, ich denke, dass die Entscheidung darüber, ob oder nicht, um eine client-side-framework gemacht werden sollte, basiert auf der gut dokumentierten vor-und Nachteile. Sobald diese Entscheidung getroffen ist, die damit verbundenen Probleme gelöst werden können.
Nehmen wir an, Sie verwenden irgendeine Art von server-side framework/Plattform, sowie einen client-side Frameworks ein, um ein wenig von UI-Interaktivität. Jetzt gibt es ein problem mit wo die Modell-Logik: auf dem client, server oder beides.
Einen Weg, das problem zu lösen, definieren Sie Ihre Modell-Logik in nur der client oder dem server. Dann haben Sie keine code-Duplizierung, aber es wirkt sich auf einige der High-level vor - /Nachteile.
Zum Beispiel, wenn Sie Ihre Modell-Logik ist zu 100% server-Seite, verlieren Sie einige der interaktive Teil der Benutzeroberfläche. Oder sind Sie ständig werfen das Modell zum/vom server, die haben ein paar Nachteile.
Wenn Ihr Modell-Logik ist zu 100% client-Seite, die Sie erleiden könnte von performance-Problemen, abhängig von der Größe der view /model. Dies ist einer der Gründe, warum Twitter sich um eine server-seitige Verarbeitung Modell.
Dann gibt es "sowohl"... die Modell-Logik gibt es in dem client und dem server. Ich denke, das ist die beste Lösung, solange keine Logik dupliziert wird.
Beispielsweise auf eine Warenkorb-Seite können Sie eine Neuberechnung der Kosten für eine Bestellung basierend auf dem Preis für ein Produkt, und eine Benutzer-editierbare Feld Menge. Ich denke diese Logik sollte nur auf dem client vorhanden. Andere Modell-Eigenschaften, die sich nicht ändern, wenn Sie vollständig geladen sind wahrscheinlich gut auf dem server gehostet.
Gibt es eine Menge grauen Bereich hier... ich Kämpfe mit putting alle Eier in einen Korb. Zum Beispiel, die Wahl einer client-side-framework, wodurch eine Menge der clientseitigen Logik, und dann [hypothetisch] laufen in Probleme mit der performance, browser-Unterstützung, oder sowas. Jetzt können Sie anpassen möchten eine Seite oder zwei für die Leistung (wie move it-server-Seite, a la Twitter). Aber ich denke, dass wird smart darüber, wie Sie Ihren code strukturieren hilft mildern das Problem. Wenn Ihr code ist wartbar und sauber, verschieben von Logik vom client zum server wird nicht schwierig sein.
Der Vorteil ist, dass die client-Seite-Muster anwendbar sind, an den client, wo der server hat keine direkte erreichen. Wenn Sie erstellen interaktive HTML-UI-dann verwenden Sie die client-Seite MVVM. Server-side MVC vielleicht noch relevant sein, in diesem Fall für die Bereitstellung von entsprechenden Inhalt an den client. Zum Beispiel, die ASP.NET WebAPI ist ein framework zum erstellen von HTTP-APIs, das eine ähnliche controller-Architektur, um die ASP.NET MVC-framework. Die API implementiert, mit diesem Rahmen genannt werden kann, die von client-side code was in MVC auf der server-Seite und MVVM auf der client-Seite. Normalerweise, wenn mit MVC auf dem server und MVVM client-Seite, die Verantwortung der jeweiligen Seiten sind sehr unterschiedlich und somit gibt es keine Redundanz.
Die Tatsache, dass Sie ein integrieren des MVVM-Modell in eine bereits implementierte MVC-framework ist auch eine tolle Sache, wir haben vor kurzem Hinzugefügt knockout auf einige neue Projekt-Seiten passen in eine bereits veraltete MVC-framework (alte Seiten, die nicht das framework selbst).
Ich denke MVVM ist fantastisch, wie die obige Antwort heißt es, es bietet eine außergewöhnliche Benutzererfahrung mit extrem schnellen Reaktionszeiten, die Sie verstecken können, Ihre Validierung Anrufe im hintergrund mit heraus, verlangsamt Sie und Ihre intuitive.
Den Schmerz ist jedoch, dass es SEHR schwer ist, unit-Tests, und Sie können einige sehr GROßE javascript-Dateien, auch die zusätzliche Codierung haben wir zu tun hatten, als unsere legacy-Systeme laufen immer noch auf IE6 ist lächerlich.
Aber MVVM und MVC nicht verwendet werden, ausschließlich auf eigene, verwenden wir beide. Aber mit 3 Ebenen der Validierung ist etwas, was immer noch nervt mich.
Ernst. Die Nutzung der Transport Teil der frontend-Logik in den browser kann steigern Sie Ihre Anwendung, die Entwicklung, warum Sie halten strenger, Daten-Verarbeitung gekapselt auf server-Seite.
Dies ist im Grunde die Schichtung. Zwei Schichten, die eine über die Gespräche mit der unten-und Umgekehrt:
Du normalerweise exchange value-Objekte in einem leichten Serialisierung Formate wie Json zwischen den beiden.
Kann dies Recht gut anzeigen, was die Benutzer erwarten, dass Sie sich in eine sinnvolle Struktur bei domain-Objekte auf server-Seite könne nicht sein, dass detaillierte.
Jedoch, die wirkliche macht wird, wenn der server-Seite ist nicht in javascript geschrieben und an einigen bestimmten Punkt, weil ich glaube, Sie können nicht erstellen, sowie domain-Objekte. Betrachten Scala (oder so ähnlich ausdrucksstark) dann wenn Sie laufen in das Problem.
Zehn Monate später, nach dieser Frage habe ich die beiden Muster innerhalb der gleichen Anwendung.
Das einzige problem war die Notwendigkeit, die Zuordnung der Modelle zweimal.
MVC (ASP.NET MVC 4 Web API)
Die wichtigste Ressource war die Routen.
Controller' Aktionen.
Bestellanforderungen und zum Rendern der Ansichten.
server-side-Modelle, aber Sie alle Ressourcen, die von Teilweisen Ansichten und
Abschnitte.
MVVM - (Knockout.js)
Insgesamt, das MVC-Kombination mit MVVM sehr nützlich waren, aber es brauchte eine große know-how und wissen. Geduld ist erforderlich, auch, weil Sie nachdenken müssen, die die Zuständigkeiten der einzelnen application-layer.