web-dev-qa-db-fra.com

MVC vs Flux? Bidirectionnel ou unidirectionnel?

En regardant le diagramme suivant (qui explique MVC), je vois un flux de données unidirectionnel.

Alors pourquoi considérons-nous que MVC a un flux de données bidirectionnel tout en justifiant Flux?

MVC Pattern

36
Arian Hosseinzadeh

Parce que dans les frameworks Javascript, le MVC ne fonctionne pas comme vous l'avez décrit. L'interface utilisateur communique généralement de manière bidirectionnelle avec le modèle, comme dans:

  1. Types d'utilisateurs dans l'entrée View
  2. Le framework MVC lie onchange () pour mettre à jour un modèle.
  3. La demande Ajax apporte de nouvelles données de modèle.
  4. MVC Framework met à jour la valeur de l'entrée pour correspondre au modèle.

Dans l'architecture Flux, l'interface utilisateur ne déclencherait qu'une action indépendante avec le type et les données associées à un répartiteur qui mettrait alors à jour le modèle de la même manière que n'importe quelle méthode ajax d'arrière-plan mettrait à jour le modèle.

Référence: http://www.thesoftwaresimpleton.com/blog/2013/03/23/client-side-mvc/

"Le MVC côté client est complètement différent du MVC côté serveur"

"Nous mettons en place une communication bidirectionnelle entre deux objets ..."

"En bref, nous connectons ensemble la valeur de la propriété firstName de l'objet Person à la propriété value de l'entrée."

http://guides.emberjs.com/v1.10.0/object-model/bindings/

les liaisons dans Ember.js peuvent être utilisées avec n'importe quel objet, pas seulement entre les vues et les modèles .

15
chugadie

Real et Pure MVC est unidirectionnel. Il ressort clairement du diagramme wikipedia collé dans la question.

Il y a plus d'une décennie, lorsque les frameworks côté serveur comme Apache Struts ont implémenté une variante de MVC appelée modèle MVP (Model View Presenter), ils ont fait passer chaque demande par le contrôleur et chaque réponse par le biais du contrôleur. Tout le monde a continué à l'appeler MVC. En raison de la nature inhérente du Web, aucune modification du modèle ne peut être propagée à la vue sans que la vue envoie une demande ou une mise à jour. Donc Pure MVC n'est pas implémenté. Plutôt MVP est implémenté.

Il y a quelques années, lorsque des frameworks comme Angular, Ember, Knockout ont implémenté MVC sur le front-end, ils ont implémenté une autre variante de MVC appelée Model View ViewModel (MVVM), peu de gens l'ont appelé MVC. (et peu se sont rendu compte que la terminologie n'était pas importante et l'appelait MVW (W signifie Wthing)), aucun d'entre eux n'a implémenté du MVC pur.

Quand React est né, ils en ont profité pour implémenter du MVC pur (pas MVP ou MVVM), et l'ont renommé Flux avec peu de changements. Je pense que Flux est une variante de MVC. Bien que, L'équipe Flux/React dit que ce n'est pas MVC, je vois beaucoup de parité entre les deux architectures - Flux et MVC.

28
Arun Kandregula

Je suis développeur intégré et j'utilise le modèle MVC dans mon application. Mon application est très petite et j'ai configuré mon architecture pour être un MVC presque unidirectionnel. Mais, j'ai lu cet article, expliquant MVC côté client, et quelques réflexions sur les différences entre MVC et FLUX.

Référence: http://www.christianalfoni.com/articles/2015_08_02_Why-we-are-doing-MVC-and-FLUX-wrong

MVC traditionnel

|------|  request   |------------|  request   |-------|
|      | ---------> |            | ---------> |       |
| VIEW |  response  |            |  response  |       |
|      | <--------- |            | <--------- |       |
|------|            |            |            |       |
                    | CONTROLLER |            | MODEL |
|------|  request   |            |  request   |       |
|      | ---------> |            | ---------> |       |
| VIEW |  response  |            |  response  |       |
|      | <--------- |            | <--------- |       |
|------|            |------------|            |-------|

FLUX

 COMPONENTS          ACTION CREATORS           STORES

    |----------------------<<<<-------------------|
    |                                             |
|------|            |------------|            |-------|
|      |  request   |            |  request   |       |
| VIEW | ---------> |            | ---------> | MODEL |----
|      |            |            |            |       |   |
|------|            |            |            |-------|   |
                    | CONTROLLER |                        |
|------|            |            |            |-------|   |
|      |  request   |            |  request   |       |   |
| VIEW | ---------> |            | ---------> | MODEL |   |
|      |            |            |            |       |   |
|------|            |------------|            |-------|   |
   | |                                           |        |
   | |--------------------<<<<-------------------|        |
   |----------------------<<<<----------------------------|
15
user12345

Certaines personnes ont adopté le terme MVC pour faire référence aux frameworks JavaScript qui d'autres ont souligné qu'il ne s'agissait pas de MVC pur mais constituaient une variante que l'on pourrait appeler MVP (Backbone), MVVM ( Angular 1 ) ou plus largement MV * (voir aussi réponse d'Arun ).

Lorsque Facebook a introduit Flux , ils l'ont comparé aux problèmes avec MVVM/MVP/MV * , mais ont utilisé le terme MVC de manière confuse.

Pour les développeurs MVC purs qui regardent cette vidéo, les problèmes déclarés de Facebook avec MVC n'avaient pas de sens, et la description de Flux par Facebook était plus proche de MVC que du système MVVM qu'ils ont décrit:

Le problème principal est qu'ils "faisaient" mal MVC. Ensuite, ils l'ont corrigé, mais ont décidé de le renommer et de dire qu'ils avaient inventé le modèle de découplage des données, de la vue et de la gestion des événements

commentaire YouTube

Il semble que vos programmeurs aient créé des flux car ils ne savaient pas comment utiliser correctement MVC et les répartiteurs d'événements.

commentaire YouTube

3
Alasdair McLeay