Si tratta di una corretta implementazione di un pattern MVC iOS?

4

Dopo aver sfogliato i documenti Apple, ho trovato questo esempio del pattern MVC:

UsandoNSNotificationCenteresenzausareKVO,questodiagrammaquisottorappresentaunacorrettaimplementazionedelpatternMVC?Incasocontrario,cosac'èchenonvaecomepuòesserecorrettoomigliorato?

  1. L'app inizia con la luce sinistra impostata su on e quella destra su off. Può essere accesa una sola luce alla volta.
  2. Gli utenti premono il pulsante destro, che invia un'azione di destinazione al controller della vista.
  3. Il controller della vista riceve il messaggio e invia un messaggio al giusto modello di dati chiari.
  4. La luce giusta utilizza NSNotificationCenter per notificare al controller che la luce giusta è cambiata.
  5. Il controller riceve il messaggio ed esegue il seguente metodo

    BOOL rightLightOn = [rightLightData on]; if( rightLightOn ) { [rightLightImage setImage:onImage]; [leftLightSwitch setOn:NO]; } else { [rightLightImage setImage:offImage]; }

  6. La modifica dell'interruttore fa in modo che l'UISwitch richiami il metodo "leftSwitchChanged" nel controller.

  7. Il controller riceve il messaggio e invia un messaggio al modello di dati a luce sinistra.
  8. La luce a sinistra utilizza NSNotificationCenter per notificare al controller che la luce sinistra è cambiata.
  9. Il controller riceve il messaggio e di nuovo esegue lo stesso metodo mostrato sopra, ma modificato per la luce giusta.

Inoltre, cosa succede se il sistema non utilizzava uno switch e utilizzava un UIButton che visualizzava il testo, "Attiva" o "Disattiva". Lo switch aggiornava il proprio testo, quindi chiama "rightSwitchChanged" "O chiamerebbe rightSwitchChanged immediatamente e attendi che il controller della vista cambi il testo?

    
posta TigerCoding 24.02.2012 - 17:32
fonte

2 risposte

4

Sì, si adatta allo schema. Ma ...

Non sono un fan delle notifiche in iOS. Infatti in molti casi vengono usati come goto glorificati.

Se chiami [model setLightOn] , perché il modello ha bisogno di inviarti una notifica che la luce è accesa? È acceso!

Un altro commento nit-picky: setLightOn è un nome povero. setLightOn:NO - questo spegne la luce o semplicemente ignora il messaggio?

    
risposta data 26.02.2012 - 04:49
fonte
1

Soddisfa le tue esigenze?

MVC, come tutti i modelli software, è soggetto ad evoluzione. Non esiste un modo "giusto" o "corretto".

Ad esempio, è possibile eseguire il bolt su una libreria Javascript su ASP.NET MVC e disporre di Model-View-ViewModel, dove la maggior parte dell'azione client viene effettivamente eseguita nel browser. Alcuni sostengono che questo è un approccio "più puro", e ci sono alcuni vantaggi nel farlo in questo modo.

Non essere un astronauta di architettura, o non entrare nell'idea di qualcuno della "strada giusta". Fai ciò che funziona.

    
risposta data 24.02.2012 - 17:47
fonte

Leggi altre domande sui tag