Quali modelli di libro per lo sviluppo iOS contiene queste informazioni specifiche? [chiuso]

3

Ho letto diversi libri sullo sviluppo di iOS e Objective-C, ma ciò che molti di loro insegnano è come lavorare con le interfacce e tutti contengono il modello all'interno del controller di visualizzazione, ovvero una visualizzazione basata su UITableViewController avrà semplicemente un NSArray come modello. Sono interessato a quali sono le migliori pratiche per progettare la struttura di un'applicazione.

In particolare mi interessano le best practice per quanto segue:

  • Come separare un modello dal controller della vista. Penso di sapere come farlo semplicemente sostituendo l'esempio di stile NSArray con un oggetto modello specifico, tuttavia quello che non so come fare è avvisare la vista quando il modello cambia. Ad esempio in .NET risolverei questo conformandomi a INotifyPropertyChanged e al databinding, e analogamente a Java userei PropertyChangeListener .
  • Come creare un modello di servizio per i miei oggetti di dominio. Ad esempio, desidero imparare il modo migliore per creare un servizio per un oggetto ipotetico Widget per gestire un DB interno e anche servizi per comunicare con endpoint remoti. Devo imparare i modi migliori per farlo in un modo in cui i componenti dell'interfaccia possono sottoscrivere eventi come widgetUpdated . Questi servizi dovrebbero essere classi singleton e alcuni come la dipendenza iniettata in oggetti model / controller.

I libri che ho letto fino ad ora sono:

Ho anche acquistato i seguenti libri aggiornati, ma non li ho ancora letti.

Vengo da uno sfondo di Java e C # con 15 anni di esperienza, ho capito che molti dei modi in cui avrei fatto cose in questi linguaggi potrebbero non adattarsi al modo di sviluppare applicazioni ObjC.

Qualcuno potrebbe fornirmi il il libro su questo argomento contenente questo specifico argomento?

    
posta Brett Ryan 11.12.2012 - 06:16
fonte

2 risposte

4

Cocoa Design Patterns di Erik Buck e Donald Yacktman è una buona risorsa per capire come vengono utilizzati vari modelli di design in cacao. Sebbene il libro abbia un paio d'anni e sia scritto per Cocoa piuttosto che per Cocoa Touch, i due framework sono concettualmente molto simili, e le aggiunte in iOS 5 e 6 fanno ben poco per cambiare le idee di base, specialmente quelle che stai chiedendo.

How to separate a model from the view controller. I think I know how to do this by simply replacing the NSArray style example with a specific model object, however what I do not know how to do is alert the view when the model changes.

Generalmente il modello non parlerà direttamente con la vista: dovrebbe passare attraverso il controller. Hai una serie di opzioni in questo senso, incluso ma non limitato a:

  • Chiedi al controller di visualizzazione di osservare le parti rilevanti del modello usando Key Value Observing .

  • Usa notifiche .

  • Se il modello sta cambiando a causa dell'input dell'utente, il controller della vista potrebbe aspettarsi che alcuni aspetti del modello cambino.

  • Utilizza la delega. Definisci un protocollo delegato per il tuo modello e adottalo nel tuo controller di visualizzazione. Imposta il controller della vista come delegato del modello.

How to create a service model for my domain objects...

Dal tuo commento vedo che stai cercando un modo per gestire il tuo grafico degli oggetti del modello. Il framework Core Data fornisce gestione e persistenza del grafo degli oggetti - esso facilita il lavoro con i dati come oggetti senza doversi preoccupare di come archiviarli tutti nelle tabelle del database. È veloce e funziona bene anche con quantità di dati relativamente grandi.

    
risposta data 11.12.2012 - 07:06
fonte
3

Ottima domanda. Ho faticato a trovare il modo migliore per creare app obiettive che aderissero a MVC e trovo che l'utilizzo dei delegati sia spesso l'approccio più pulito per sincronizzare le visualizzazioni con i modelli.

Quindi, se il tuo modello sta caricando qualcosa sulla rete, il delegato potrebbe apparire come questo:

@protocol XXItemLoadDelegate <NSObject>
- (void) willLoadItemWithIdentifier:(NSString*)identifier;
- (void) didLoadItem:(XXItem*)item;
- (void) didFailToLoadWithError:(NSError*)error;
@end

E penso che sia chiaro come una vista potrebbe mostrare / nascondere un indicatore occupato e quindi aggiornare una volta caricato l'elemento.

I principali svantaggi del modello delegato sono:

  • dimenticando di impostare il delegato
  • dimenticando di chiamare gli eventi delegati nel modello
  • sovrascrittura del delegato (quando più viste vogliono essere notificate)
  • resettare il delegato (ad esempio se una vista viene riutilizzata, il delegato dovrebbe essere nullo per primo)
  • doloroso per refactoring se si decide di aver bisogno di più osservatori
  • dare il protocollo e delegare i metodi ai nomi coerenti

Nonostante tutti questi inconvenienti, preferisco l'esemplificazione dei delegati ad altri approcci.

NSNotification s è ottimo per mantenere sincronizzati pezzi di codice completamente indipendenti. Ma ho scoperto che dovrebbero essere usati con parsimonia, in quanto rende il codice incredibilmente difficile da tracciare e eseguire il debug.

KVO è anche un'opzione per sincronizzare le viste con i modelli, ma non ho molta esperienza con l'utilizzo in progetti più grandi.

Non mi importava molto del libro Cocoa Design Patterns . Sembrava scaduto e non aveva tutte le informazioni pratiche che avrei sperato.

Al posto dei libri, consiglierei anche di leggere i più grandi progetti iOS su github. Puoi sempre vedere alcuni disegni di design in azione e imparare alcuni trucchi. Ad esempio:

App Sales Mobile

    
risposta data 11.12.2012 - 10:49
fonte

Leggi altre domande sui tag