2015-10-31 12 views
24

Patrząc na poniższy diagram (który wyjaśnia MVC), widzę jednokierunkowy przepływ danych.MVC vs. Flux? Dwukierunkowy kontra jednokierunkowy?

Dlaczego więc uważamy, że MVC ma przepływ danych dwukierunkowych, jednocześnie usprawniając Flux?

MVC Pattern

+11

ludzie lubią co jakiś czas zmieniać nazwy rzeczy i myślę, że właśnie pojawił się z nowym pomysłem. Weź przykład [diagram architektury FLUX] (https://facebook.github.io/flux/docs/overview.html#structure-and-data-flow) na przykład, jeśli zastąpisz Dispatchera kontrolerem i Store with Model, co zrobić dostajesz? –

+0

Aby trochę zagłębić się w szczegóły, taka architektura została bardzo dobrze opisana w artykule [GUI Arcitectures] (http://www.martinfowler.com/eaaDev/uiArchs.html#Model-view-presentermvp) autorstwa Martina Fowlera: – xmike

+0

https: //www.infoq.com/articles/no-more-mvc-frameworks –

Odpowiedz

11

Ponieważ w Javascript Ramki MVC nie działa tak, jak przedstawiony. UI zazwyczaj komunikuje się dwukierunkowo z modelem, na przykład:

  1. Użytkownika typów polu widzenia wejścia
  2. MVC ramy wiąże onChange(), aby zaktualizować model.
  3. Żądanie ajaxowe wprowadza nowe dane modelu.
  4. Aktualizacje środowiska MVC Wyświetlanie wartości wejściowej zgodnej z modelem.

W architekturze Flux interfejs użytkownika uruchamiałby tylko niezależną akcję z typem i powiązanymi danymi z dyspozytorem, który następnie aktualizowałby model w taki sam sposób, w jaki jakakolwiek metoda ajax tła aktualizowałaby model.

referencyjny: http://www.thesoftwaresimpleton.com/blog/2013/03/23/client-side-mvc/

"Client Side MVC jest zupełnie inna niż Server Side MVC"

"My konfigurowania komunikacji dwukierunkowej między dwoma obiektami ..."

"W skrócie, łączymy razem wartość pierwszej właściwości obiektu Person z właściwością value wejścia".

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

Wiązania w ember.js może być używany z dowolnym obiektem, nie tylko między widoki i modele.

+0

Możesz użyć poniższego równania dla dwukierunkowych i jednokierunkowych: 1) Kontroler -> Widok 2) Kontroler -> Model 3) Zobacz <=> Model – Siddiqui

15

Jestem wbudowanym programistą i używam wzorca MVC w mojej aplikacji. Moja aplikacja jest bardzo mała i skonfigurowałem swoją architekturę jako prawie jednokierunkową MVC. Ale przeczytałem ten artykuł, wyjaśniając stronę klienta MVC i kilka myśli na temat różnic między MVC i FLUX.

referencyjny: http://www.christianalfoni.com/articles/2015_08_02_Why-we-are-doing-MVC-and-FLUX-wrong

Tradycyjny MVC

|------| 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 | | 
|  |   |   |   |  | | 
|------|   |------------|   |-------| | 
    | |           |  | 
    | |--------------------<<<<-------------------|  | 
    |----------------------<<<<----------------------------| 
+2

To, co nazywasz "Tradycyjnym MVC", to model aplikacji lub MVP, a "FLUX" to klasyczne MVC https://www.martinfowler.com/eaaDev/uiArchs.html#ModelViewController – maksimr

+0

Czy trudno było wpisać ten model za pomocą klawiatury? A może użyłeś generatora lub narzędzia? –

16

rzeczywistym i Czysta MVC jest jednokierunkowa. Wynika to wyraźnie z wklejonego w pytaniu diagramu wikipedii.

Ponad dziesięć lat temu, gdy platformy po stronie serwera, takie jak Apache Struts, zaimplementowały wariant MVC zwany wzorcem Model View Presenter (MVP), każde żądanie przechodziło przez kontroler, a każda odpowiedź wracała przez kontroler.Wszyscy nadal nazywali to MVC. Ze względu na nieodłączny charakter sieci wszelkie zmiany w modelu nie mogą być propagowane do widoku bez widoku wysyłania żądania lub aktualizacji. Więc Pure MVC nie jest zaimplementowany. Wprowadzono raczej MVP.

Kilka lat temu, gdy frameworki takie jak Angular, Ember, Knockout zaimplementowały MVC na frontowym końcu, zaimplementowały kolejny wariant MVC zwany modelem View ViewModel (MVVM), kilka osób nadal nazywało to MVC. (i niewielu zdało sobie sprawę, że terminologia nie jest ważna i nazwano ją MVW (W oznacza Whatever)), żaden z nich nie wdrożył czystego MVC.

Kiedy narodził się produkt React, wykorzystano okazję do wdrożenia czystego MVC (nie MVP lub MVVM) i zmieniono jego nazwę na Flux z kilkoma zmianami. Czuję, że Flux jest jeszcze jednym wariantem MVC. Chociaż zespół Flux/React twierdzi, że nie jest to MVC, widzę wiele parytetów między obydwoma architekturami - Flux i MVC.

0

Niektórzy ludzie przyjęty termin MVC w odniesieniu do ram JavaScript że others had pointed out were not pure MVC ale były wariant, który może być dalej MVP (Backbone), MVVM (Angular 1) lub szerzej MV * (patrz także Arun's answer).

Po Facebook introduced Flux, one compared it to the issues with MVVM/MVP/MV*, ale myląco użył terminu MVC.

czystej programistów MVC oglądających film, Facebook stwierdził problemy z MVC nie ma sensu, i Facebook opis strumienia był bliżej do MVC niż system MVVM Opisali:

Podstawowym problemem jest to, że "źle" działały w MVC. Potem stała, ale postanowił go przemianować i mówią którą wynalazł wzór oddzielenie danych, przeglądanie i wydarzenia obsługi

YouTube comment

wygląda jak programiści stworzyli topnika bo nie zrobił” t wiedzieć, jak prawidłowo korzystać z MVC i dyspozytorów zdarzeń.

YouTube comment