iOS Best practice per la gestione degli oggetti del modello

3

Ci sono diversi livelli a cui pongo questa domanda.

Caso 1: pensiamo al tipico design drill-down. Supponiamo che un controller di visualizzazione tabella abbia una matrice di oggetti personalizzati, e toccando una cella si spinge un controller di visualizzazione che consente all'utente di modificare l'oggetto rappresentato dalla cella. In questo caso, se il controller di visualizzazione push ha l'oggetto personalizzato come proprietà propria o utilizza un protocollo di origine / delega di dati per modificare l'oggetto personalizzato ma non il proprietario.

Caso 2: una situazione simile ma leggermente diversa è questa. Sto usando un negozio singleton per gestire una serie di conti bancari nella mia app. Un controller di visualizzazione mostrerà un elenco degli account e mi chiedo se dovrei avere l'array di account come proprietà nel mio controller di visualizzazione o ottenere l'array tramite il negozio. (L'array di account è accessibile abbastanza spesso.) Immagino che l'unica differenza sia un singolo oggetto contro una matrice di oggetti. Sono curioso di sapere quanto possano essere pesanti questi array, quindi se è più veloce caricare la matrice dallo store ogni volta o averla come proprietà nel controller della vista.

Caso 3: quando deve essere utilizzato il file system locale? Nell'esempio della mia app, si accede ai conti bancari abbastanza spesso, quindi li ho archiviati e impostati come proprietà al momento dell'avvio dell'app, ma per dati molto più grandi, li carico solo dal file system quando dovrebbero essere visualizzati o modificati. Non sono ancora sicuro di quale sia la strada giusta.

    
posta funct7 04.09.2015 - 10:27
fonte

2 risposte

1

Nel caso 1, dovresti probabilmente usare il negozio e / o qualche tipo di Data Manager. La ragione di questo è che 1) non dovrebbe essere responsabilità del ViewController cambiare i dati, e se lo si genera nel VC, dovresti cambiarne alcuni per cambiare la funzionalità.

C'è anche il problema di copiare i dati in giro. Quando lavori con le copie, non sai cosa sta succedendo con l'originale e non stai apportando modifiche in tempo reale.

Lo stesso vale per il caso 2. Il controller visualizza solo i dati, idealmente la vera repertoration dei dati, non una copia.

Se la velocità di caricamento è un problema, puoi dividere il tuo database per poter caricare solo i dati di cui hai bisogno (se puoi), e puoi anche memorizzare i dati che vengono usati spesso.

Nel caso 3, puoi anche memorizzare nella cache i dati, tenendo presente di tenere traccia delle eventuali modifiche che potrebbero verificarsi tra la memorizzazione nella cache e l'utilizzo dei dati. Il caching è meglio che semplicemente archiviare perché la tua app non occuperà molto spazio sul dispositivo dell'utente.

Gli elementi di design UX / UI come gli indicatori di filatore / attività contribuiscono notevolmente a rendere l'app più reattiva.

    
risposta data 09.12.2015 - 08:33
fonte
0

Essenzialmente hai i seguenti limiti

  • Memoria in uso

    Se hai una lunga lista di oggetti, probabilmente non vuoi copiare i loro dati. Passa i riferimenti all'origine dati e carica solo quelli di cui hai bisogno anziché l'intera lista.

  • Tempo di caricamento

    Se i tuoi dati impiegano molto tempo per essere caricati, potresti ottenerli da internet, o forse dal file system. Carica i dati in background e memorizza nella cache i dati utilizzati di frequente in memoria in modo da poter nascondere il tempo di caricamento lungo dall'utente.

  • Modifica

    Se la tua vista modifica i dati, avrai bisogno di una copia dei dati. Per gestire la memorizzazione sia della copia non modificata (in caso di errori di annullamento o di convalida) sia della versione modificata del modello prima di "salvare".

  • Disegna l'interfaccia utente

    Se hai molti o complessi elementi da disegnare e compilare, come una griglia di grandi dimensioni, potresti dover ottimizzare questo tramite l'impaginazione o il riutilizzo di elementi che vengono fatti scorrere. Anche se probabilmente troverai che questo è già integrato nei controlli standard.

risposta data 02.05.2017 - 18:31
fonte

Leggi altre domande sui tag