Sto facendo un'applicazione emberjs abbastanza complessa e la leggo a un backend di API.EmberJS: buona separazione delle preoccupazioni per modelli, negozi, controllori, viste in un'applicazione piuttosto complessa?
Le chiamate API non sono in genere legate a nessun modello particolare, ma possono restituire oggetti di vario tipo in diverse sezioni della risposta, ad es. una chiamata all'API di eventi restituirebbe gli eventi, ma restituirà anche le risorse multimediali e le persone coinvolte in quegli eventi.
Ho appena iniziato il progetto e vorrei ottenere alcune indicazioni esperte sul modo migliore per separare le preoccupazioni per avere una base di codice gestibile e pulita.
Il modo in cui mi sto avvicinando questo è:
- modelle: in sostanza, di gestire i record con i loro campi, e altre proprietà calcolati. Tuttavia, i modelli non sono responsabili per le richieste.
- ad es. Individuo, evento, foto, posta ecc.
- Negozi: Sono essenzialmente cache. Ad esempio, un
eventStore
memorizzerebbe tutti gli eventi ricevuti dal server fino ad ora (da eventuali richieste diverse) in un array e anche in un hash di eventi indicizzati daid
.- ad es. individualStore, eventStore ecc
- Controllori: legano ad una serie di chiamate API correlate, per esempio eventController sarebbe responsabile per il recupero di eventi o un particolare evento, o la creazione di un nuovo evento, ecc. Avrebbero "indirizzato" la risposta a diversi
stores
per il successivo recupero. Non mantengono la risposta una volta che è stata inviata ai negozi.- ad es. eventsController, userSearchController ecc
- Visualizzazioni: Essi sono legati a un particolare punto di vista. In generale, la mia applicazione può avere diverse visualizzazioni in luoghi diversi, ad es.
latestEventsView
sulla Dashboard oltre ad avere una pagina eventi separata. - Modelli: sono quello che sono.
Molto spesso, i miei modelli richiedono di essere vincolato direttamente ai punti vendita (ad esempio peopleView
vuole elencare tutti gli individui nella individualStore in un elenco, in ordine di qualche ordine).
E, a volte, si legano a una proprietà calcolata
alivePeople: function() { ... }.property('[email protected]'),
I vari filtraggio e di ordinamento 'prescelto' nella vista, dovrebbe restituire liste diverse dal negozio. Puoi vedere la mia ultima domanda al what is the right emberjs way to switch between various filtering options?
Chi dovrebbe fare questo filtraggio, la vista di se stessi o dei negozi?
Questo tipo di collegamento tra i livelli è corretto o un odore di codice? La separazione delle preoccupazioni è buona o mi manca qualcosa? I controllori non dovrebbero fare qualcosa di più qui? Le mie opinioni dovrebbero legarsi direttamente ai negozi?
Qualsiasi caso speciale particolare di MVC più adatto alle mie esigenze?
aggiornamento 17 Aprile 2012 La mia ricerca va avanti, in particolare da http://vimeo.com/user7276077/videos e http://jzajpt.github.com/2012/01/17/emberjs-app-architecture.html e http://jzajpt.github.com/2012/01/24/emberjs-app-architecture-data.html
Alcuni problemi con il mio progetto che ho capito sono:
- controllori che fanno richieste (negozi o modelli o qualcos'altro dovrebbe farlo, non controller)
- mancano gli stereotipi - sono importanti per le interazioni del controller di visualizzazione (Dopo qualche tempo ti rendi conto le interazioni non sono più semplici)
Questo è un buon esempio di diagrammi di stato in azione: https://github.com/DominikGuzei/ember-routing-statechart-example
UPDATE 9 Gennaio 2013
Sì, è stato a lungo, ma ultimamente questa domanda sta ricevendo molte visualizzazioni, ed è per questo che mi piacerebbe modificarlo in modo che le persone possano avere un senso.
Il panorama di Ember è molto cambiato da quando è stata inquadrata questa domanda e il nuovo guides è stato migliorato molto. EmberJS ha escogitato convenzioni (come Rails) e MVC è ora molto più definito.
Chiunque ancora confuso dovrebbe leggere tutte le guide, e guardare alcuni video: Seattle Ember.js Meetup
Al momento, sto aggiornando la mia domanda di Ember.js 1.0.0-pre2
.
Ho lavorato molto su questi stessi tipi di domande. related: http://stackoverflow.com/questions/10045619/controller-strategy-garbage-collection-destroy –
stai usando i dati ember? –
Ancora una volta, questo tipo di informazioni è al momento in cui EmberJS non è al momento disponibile. Ho iniziato a lavorare con EmberJS solo ieri e sono stato letteralmente frustrato fino al punto di tirare fuori i miei capelli perché non c'è assolutamente nulla su come dovrebbe essere installato EmberJS e su cosa è responsabile ogni tipo di oggetto - o almeno: è molto difficile trovare. –