Utilisez les modèles MVC/MVVM côté client avec le modèle MVC côté serveur

compte tenu des modèles MVC/MVVM client-side les plus populaires (comme Knockout.js , Angular.js , de Braise.js , et d'autres), j'ai un grand doute:

aussi en considérant la redondance de modélisation dans les deux côtés, quels sont les avantages et les désavantages d'utiliser ces modèles côté client avec des modèles côté serveur MVC?

24
demandé sur Gustavo Gondim 2012-08-01 21:29:29

5 réponses

j'ai eu du mal à répondre à cette question... espérons que cela aide, même si c'est dans un rond-point.

bien que certains avantages et inconvénients aient déjà été énoncés, je pense que le meilleur résumé est dans cette réponse .

pour moi, le plus grand avantage à utiliser la logique côté client est l'aspect riche UI.

mais l'élément clé de votre question semble être la "redondance du modèle" (je l'appellerais dupliquée logique, ou du moins ayant un potentiel de logique dupliquée). À mon avis, c'est un problème qui peut exister indépendamment des avantages/inconvénients dans le lien précédent.

donc tout d'abord, je pense que la décision d'utiliser ou non un cadre côté client devrait être prise en fonction des avantages et des inconvénients bien documentés. Une fois cette décision prise, les problèmes connexes peuvent être résolus.

laisse supposer que vous utilisez une sorte de côté serveur cadre / plate-forme, ainsi qu'un cadre côté client pour fournir un peu d'interactivité D'UI. Maintenant il y a un problème avec l'endroit où placer le modèle logique: sur le client, le serveur, ou les deux.

une façon de résoudre le problème est de définir votre logique de modèle dans seulement le client ou le serveur. Alors vous n'avez pas de duplication de code, mais cela affecte certains des avantages/inconvénients de niveau supérieur.

par exemple, si votre logique de modèle est 100% côté serveur, vous perdez une partie de la partie interactive de l'INTERFACE utilisateur. Ou, vous lancez constamment le modèle vers / depuis le serveur, qui aura quelques inconvénients.

si votre logique de modèle est 100% côté client, vous pourriez souffrir de problèmes de performance, selon la taille de votre vue / Modèle. C'est l'une des raisons pour lesquelles Twitter se déplace vers un modèle de traitement côté serveur.

puis il y a"les deux"... avoir modèle logique exister à la fois le client et le serveur. Je pense que c'est la meilleure solution, tant qu'aucune logique est dupliqué .

Par exemple, sur une page du panier, vous pouvez recalculer le coût d'une commande sur la base du prix d'un produit, et modifiable par l'utilisateur case quantité. Je pense que cette logique ne devrait exister que sur le client. Les autres propriétés du modèle qui ne changent pas une fois chargées sont probablement bien hébergées sur le serveur.

il y a beaucoup de zones grises ici... J'ai du mal avec mettre tous les œufs dans le même panier. Par exemple, choisir un cadre côté client, créer beaucoup de logique côté client, et puis [hypothétiquement] rencontrer des problèmes avec la performance, le soutien du navigateur, ou quelque chose comme ça. Maintenant, vous souhaitez modifier une page ou deux pour la performance (comme la déplacer côté serveur, à la Twitter). Mais je pense qu'être intelligent sur la façon dont vous structurez votre code aidera à atténuer ce problème. Si votre code est maintenable et propre, le déplacement de la logique du client au serveur ne sera pas difficile.

14
répondu Jason Capriotti 2017-04-12 07:31:21

l'avantage est que les modèles côté client sont applicables au client où le serveur n'a pas de portée directe. Si vous construisez une interface HTML riche et interactive, utilisez MVVM côté client. MVC côté serveur peut encore être pertinent dans ce cas pour fournir le contenu approprié au client. Par exemple, le ASP.NET WebAPI est un cadre pour la création D'API HTTP qui a une architecture de contrôleur similaire à la ASP.NET MVC framework. L'API implémentée avec ce cadre peut être appelé par le code côté client résultant en MVC du côté serveur et MVVM du côté client. Normalement, lors de l'utilisation du côté serveur MVC et du côté client MVVM, les responsabilités des deux côtés sont très différentes et il n'y a donc pas de redondance.

5
répondu eulerfx 2012-08-02 05:22:38

le fait d'incorporer un modèle MVVM dans un cadre MVC déjà mis en œuvre est également une bonne chose, nous avons récemment ajouté knockout à certaines nouvelles pages de projet pour s'adapter dans un cadre MVC déjà obsolète (anciennes pages, pas le cadre lui-même).

je pense que MVVM est fantastique car la réponse ci-dessus indique qu'il fournit une expérience utilisateur exceptionnelle avec des temps de réponse extrêmement rapides, vous pouvez cacher vos appels de validation dans le backround avec Out les ralentir vers le bas et son ergonomie intuitive.

la douleur cependant, c'est QU'il est très difficile de tester l'unité et vous pouvez obtenir des fichiers javascript extrêmement grands, aussi le codage supplémentaire que nous avons eu à faire comme nos systèmes d'origine fonctionnent encore sur IE6 est ridicule.

mais MVVM et MVC ne doivent pas être utilisés exclusivement sur place, nous utilisons les deux. Mais avoir 3 niveaux de validation est quelque chose qui me dérange encore.

3
répondu VeenarM 2012-08-08 09:56:51
  • avantages
    • Cela peut rock.
  • disvantages
    • vous pouvez la visser.

sérieusement. Utiliser le transport d'une partie de la logique frontend dans le navigateur peut booster le développement de votre application.

c'est essentiellement la superposition. Deux couches, celle ci-dessus parle avec celle ci-dessous et vice-versa:

[client] <--> [server]

vous échangez normalement des objets de valeur dans un format léger de sérialisation comme Json entre les deux.

cela peut assez bien cartographier ce que les utilisateurs attendent dans une structure utile tandis que les objets de domaine côté serveur ne pouvaient pas être aussi détaillés.

Toutefois, le pouvoir réel sera si le côté serveur n'est pas écrit en javascript un certain point parce que je pense que vous ne pouvez pas créer des objets de domaine bien là. Considérez Scala (ou quelque chose de similaire expressif) puis si vous rencontrez cette question.

2
répondu hakre 2012-08-10 11:58:17

dix mois plus tard, après cette question, j'ai utilisé les deux modèles à l'intérieur de la même application.

le seul problème était la nécessité de cartographier les modèles deux fois.

MVC (ASP.NET MVC 4 API Web)

la ressource La plus importante était les routes.

  • modèles ont été créés pour les interactions de base de données et comme arguments pour actions des contrôleurs.
  • Les contrôleurs
  • ont été créés pour manipuler L'API des réquisitions et de rendre les vues.
  • vues n'ont pas été modélisées avec côté serveur modèles, mais toutes les ressources de Vues Partielles et Section.

MVVM (Knockout.js)

Les modèles
  • ont été créés avec les mêmes propriétés que les modèles côté serveur.
  • Les vues
  • ont été liées avec les propriétés des modèles, et a diminué beaucoup de la taille des vues.
  • View-les modèles ont été créés avec les valeurs fournies par les méthodes API.

dans l'ensemble, la combinaison du MVC et du MVVM s'est révélée très utile, mais il a fallu une grande expertise et des connaissances approfondies. La Patience est également nécessaire, car vous devez penser aux responsabilités de chaque couche d'application.

2
répondu Gustavo Gondim 2013-06-25 16:27:40