2012-05-24 18 views
17

backbone.js è stato descritto come un framework MVC per Javascript. Ma è così?Backbone.js è davvero un MVC?

Ecco la descrizione del modello, da http://documentcloud.github.com/backbone/

Modelli sono il cuore di qualsiasi applicazione JavaScript, contenente i dati interattive e una grande parte della logica circonda: conversioni, convalide, proprietà calcolate e controllo di accesso. Si estendere Backbone.Model con i metodi specifici del dominio e il modello fornisce un set di base di funzionalità per la gestione delle modifiche.

Ora, questa non è affatto la mia comprensione del modello in MVC. Nella mia comprensione, il modello è solo le classi che modellano il dominio, quindi gli oggetti Studente, Scuola e Insegnante. Il controller esegue la logica aziendale su di essi e interagisce con la vista per visualizzare e ricevere input.

Questa comprensione è coerente con le varie definizioni che si trovano sul web, IE http://en.wikipedia.org/wiki/Model_view_controller:

Model-View-Controller (MVC) è un modello di progettazione per l'utente del computer interfacce che divide un'applicazione in tre aree di responsabilità:

Modello: gli oggetti di dominio o strutture di dati che rappresentano stato dell'applicazione.

Quindi, la mia domanda è: backbone.js è davvero un framework MVC in qualsiasi senso, o è più solo un modo generale di aiutarti a incollare tutto insieme?

Per inciso, la definizione del Modello da FAQ backbone.js sembra differire da quella che ho citato in precedenza (anche da backbone.js http://documentcloud.github.com/backbone/#FAQ-mvc:

Backbone.Model - come un modello meno Rails . i metodi della classe avvolge una riga di dati in logica di business

Quindi, in che senso è backbone.js davvero un MVC o no

(Caveat.?: Sto solo valutando backbone.js al momento.)

+1

Ecco perché molte persone si riferiscono a framework come MV * –

+0

Nota i tipi di * logic * indicati come parte del modello: "conversioni, convalide, proprietà calcolate e controllo di accesso". Queste sono tutte le preoccupazioni sensibili degli oggetti di dominio in qualsiasi applicazione MVC. Non sono la stessa logica dell'applicazione/business, come il routing tra le visualizzazioni, l'invio di aggiornamenti a un database, ecc. Che di solito sono responsabilità del controllore. – mellamokb

+1

Dovrei davvero minimizzare questo (ma non lo sto facendo) questo sicuramente sembra una trama per guadagnare rep !! ma comunque nessuno ha detto che Backbone è MVC? ** Lo spiegano come una libreria che fornisce una struttura utilizzando modelli, viste, collezioni e router (ancora una volta non si parla della sua somiglianza con MVC) ** le persone non possono aiutare con ipotesi sbagliate possono? – Deeptechtons

risposta

11

sua un po 'di confusione quando si cerca di trovare il "M" (modello) il "V " (View) e "C" (Controller).

In questo modo possiamo sempre discutere sui termini ma ciò che è importante è l'intenzione.

interseca la "Termini" con il "Intenzione":

La "M":

Backbone Models. Le collezioni sono collegate a Modelli.

Il "V":

Il predefinito sottolineatura.js modello rappresenta il "vista Intenzione" standard MVC

La "C":

Backbone Visualizza è la controller. Si chiama Visualizza in backbone (come in molti altri come Django) perché gestisce il rendering. Da MVC punto di vista è un controller. Itinerari sono legati con le Visualizzazioni

Ora, a volte solo per soddisfare la MVC abbreviazione alcuni lo chiamano "Model View Collezioni". Ma questo è ciò che non dovrebbe essere detto.

18

Backbone è uno di quelli MV * (MV-star). C'è senza controller perché la logica che gestisce l'app è nella Vista (qualcosa come M (V + C) invece).

E non esiste una definizione unificata per "Modello" poiché viene utilizzata in modo diverso tra diversi framework in lingue diverse. Ma comunemente, i modelli sono solo un'astrazione della memorizzazione dei dati e opzionalmente hanno un po 'di logica come ganci di validazione, formattazione e cambio di stato.

+0

perché dovresti inserire la logica nella vista? –

2

Penso che tu ti stia appiccando ai nomi. Non tutti i framework MVC rispettano la stessa convenzione di denominazione. Ad esempio, in Django, i controller sono chiamati Views e Views sono chiamati Templates. Backbone segue un modello di denominazione simile.Nota, Backbone è molto flessibile nella parte delle viste, non impone alcuna libreria di template particolare.

Come già notato, la logica inclusa nei modelli Backbone è la logica che è la preoccupazione del modello. Un database relazionale standard, che è una raccolta di modelli (tabelle), di solito si preoccupa del tipo di dati nelle colonne.

La logica che normalmente verrebbe nei tuoi controller ("Viste" di Backbone) sarebbe come gestire i dati di sessione transitori, controllando lo stato dell'utente (ad esempio autenticato, anche se non lo si farebbe in js), legando le viste a modelli (Backbone fa esattamente questo, gestendo dove e quando i modelli sono memorizzati/creati in base alle azioni dell'utente e ai modelli di binding da aggiornare sulle modifiche del modello).

Quindi, in sintesi, Backbone si attacca piuttosto bene a MVC, molto meglio della maggior parte dei framework MVC lato server che sono in genere framework "PAC" (Presentation-Abstraction-Control).

2

Tipo di entrambi. Se stai guardando il senso stretto di un modello; cioè, che il modello è semplicemente dati, quindi no. Ma le convalide, le conversioni, ecc. Sono state collocate lì perché Backbone è abbastanza centrato sul modello. Dalla mia esperienza personale, in genere tratta i modelli Backbone nel senso tradizionale in quanto il modello è la rappresentazione di un'applicazione del backend data store e tutto ciò che ha sono metodi accessor per manipolare tali dati.

Il punto è che sebbene esistano le funzioni per convalidare o eseguire il controllo di accesso, ecc., È possibile scegliere di seguire un modello MVC più classico. Dipende solo da te. Questo è ciò che amo di Backbone è che ti dà un motore MVC su cui costruisci un'intera architettura di applicazione. Se vuoi seguire il classico pattern di progettazione MVC, puoi certamente farlo. Saluti!

1

in backbone.JS MVC sta per Model View COLLECTION ...