MVCS - Model View Controller Store

34

Recentemente ho deciso di iniziare a imparare lo sviluppo iOS e, a tal fine, ho letto Programmazione iOS: The Big Nerd Ranch Guida . Nel libro gli autori descrivono un modello di progettazione MVCS - Model-View-Controller-Store , l'idea di base è che dal momento che molte applicazioni fanno uso di più fonti esterne di dati mantenendo la logica della richiesta nel controller può diventa molto caotico, invece gli autori propongono di spostare tutta la logica della richiesta dal controller e in un oggetto separato.

In breve, per citare il libro

Model-View-Controller-Store puts request logic into a separate object, and we call this object a store (Figure 28.4). Using a store object minimizes redundant code and simplifies the code that fetches and saves data. Most importantly, it moves the logic for dealing with an external source into a tidy class with a clear and focused goal. This makes code easier to understand, which makes it easier to maintain and debug, as well as share with other programmers on your team.

E

The cool thing about asynchronous stores is that even though a lot of objects are doing a lot of work to process a request, the flow of the request and its response are in one place in the controller. This gives us the benefit of code that’s easy to read and also easy to modify.

Volevo scoprire di più su questo modello e vedere cosa avrebbero potuto dire gli altri al riguardo, ma mentre cercavo online gli unici riferimenti che riuscivo a trovare erano quelli di quello stesso libro (lo schema forse è noto con qualche altro nome? ).

Per me la logica dell'autore sembra avere senso, e sembra un'estensione logica del normale pattern MVC, ma forse è perché non ho molta esperienza con il pattern MVC in pratica (oltre all'incursione in iOS sviluppo Ho una sorta di MVV utilizzato con backbone.js (ovvero se lo consideri MVC )).

Speravo che forse qualcuno con più esperienza possa far luce sul fatto che ci siano evidenti difetti / problemi con il pattern MVCS che mi manca.

    
posta Jack 22.01.2013 - 00:01
fonte

2 risposte

17

"Store", nel caso di pattern di progettazione MVCS, tende a privilegiare la logica di archiviazione. Nel caso di iOS, questa è solitamente un'implementazione di Core Data. Se crei un modello supportato da Core Data in Xcode, vedrai l'aspetto "Negozio" di questo modello di progettazione nascosto nella classe AppDelegate.

Per portare questo al livello successivo, creerò spesso una classe manager singleton che gestisce l'impostazione dello stack Core Data e si occupa di tutto il recupero / salvataggio che è coinvolto nello stack. Come dice la citazione che hai citato, questo rende molto facile non solo chiamare questi metodi, ma anche regolarli se necessario, invece di avere il salvataggio / il recupero di chiamate ovunque nei vari controller di visualizzazione.

Il paradigma "Store" non è limitato ai Core Data, però. Il tuo negozio potrebbe essere solo un servizio web. Forse hai una classe che interagisce con Facebook, Twitter, Yelp o qualche altra API basata su REST. Ho trovato (e analogamente segue la tendenza) che anche questi tipi di classi sono chiamati Manager. Gestiscono letteralmente tutti i dettagli interni in modo che le altre classi possano semplicemente inserire o ottenere esattamente ciò di cui hanno bisogno.

Per quanto riguarda difetti evidenti o problemi con questo modello di progettazione ... Come con qualsiasi modello di progettazione, il problema più evidente è assicurarti di aver impostato il tuo progetto in modo tale che Jives con il paradigma. Soprattutto con un modello di design che è nuovo per te, questo a volte può essere la parte più difficile. Il vantaggio di rompere la logica del "Negozio" nella sua classe è il fatto stesso che semplifica notevolmente la manutenibilità del codice.

    
risposta data 22.01.2013 - 17:31
fonte
17

'Store' in questo contesto suona molto come un Repository o Servizio . In tal caso, questo è un modello estremamente comune. I difetti / problemi varieranno con la tua implementazione e il dominio del problema.

A livello generale, sembra che il libro stia utilizzando "Store" per rappresentare un livello di logica aziendale + un livello di logica di recupero dei dati che gestisca un insieme di dati che potrebbero o meno far parte della tua applicazione.

Ad esempio, avvolgere l'API di twitter in un 'Store' è un buon modo per compartimentare quella logica.

Su ulteriore pensiero
Utilizzando questa definizione di MVC (che credo sia abbastanza chiara) , lo 'Store' è in realtà un sottoinsieme del modello. La delimitazione tra se si tratta di un'estensione di MVC o se si tratta di un pattern di recupero dei dati non è molto utile. Finiscono per apparire come lo stesso codice.

In conclusione, penso che starai bene seguendo i consigli che suggeriscono (sembra complessivamente valido).

    
risposta data 22.01.2013 - 02:09
fonte

Leggi altre domande sui tag