Massive View Controller - IOS - Soluzioni

16

Sono sicuro che ogni nuovo sviluppatore iOS ha il seguente problema: I controller di visualizzazione sono molto affollati di codice per vari scopi, raggiungendo facilmente 500 + linee di codice.

Ecco come appare per due schermate di base e comuni:

1) La schermata del modulo:

2)LaschermataControllervistatabella

Finora ho letto di due soluzioni diverse:

  1. Prima soluzione: link . Questo è basato su Notifiche, separa completamente il View Controller dal modello di visualizzazione (Intenzioni) e quindi riduce il codice nel View Controller. Penso che abbia il rovescio della medaglia del codice, simile alle strutture Go-To. Sembra questo:

  2. LasecondasoluzionemantieneglistessiViewControlleraffollati(leazionideipulsantivengonoeseguiteall'internodiVCecosìvia).mautilizzalibreriecome TPKeyboardAvoiding , BlocksKit o altre soluzioni per la maggior parte basate su categorie. Con questa seconda soluzione, il codice viene ridotto drasticamente ma il controller di visualizzazione ha ancora molte responsabilità.

Cosa ne pensi di queste soluzioni? Che è migliore? C'è uno migliore?

    
posta Ravul 23.12.2014 - 17:39
fonte

3 risposte

6

Possiamo utilizzare MVVM per risolvere questo problema.

Model-View-ViewModel, o pattern MVVM come è comunemente noto, è un pattern di progettazione dell'interfaccia utente. VM prende tutta la logica sulla preparazione dei dati del modello per l'interfaccia utente da VC.

Esempio:
Hai un oggetto modello con alcuni campi, vuoi formattarne alcuni, fare calcoli e combinarli.

Nel caso MVC tutta questa logica si trova in ViewController.
In MVVM lo sposti da VC a VM.

VM preparerà tutti i dati per l'UI e VC lo imposta così in questo modo.

(nella classe VC)

self.descriptionLabel = self.viewModel.textForDescriptionLabel;

Tutorial e argomenti:

risposta data 24.12.2014 - 17:42
fonte
3

Ho dovuto sbrogliare il codice in View Controller di dimensioni enormi prima e questo ha impedito la mia capacità di navigare il contenuto all'inizio. Una cosa importante che ho capito è che la dimensione da sola del View Controller non era una ragione sufficiente per rompere le cose. C'è complessità nell'avere 1 file di grandi dimensioni e anche la complessità nell'avere un mucchio di piccoli file. Ecco alcuni validi motivi per il refactoring per rompere un View Controller in parti più piccole:

MVC

Il View Controller non dovrebbe fare molto di più che essere la colla di collegamento tra la vista e il modello. Se hai un sacco di codice di connessione di rete, codice di manipolazione delle immagini e così via, prendi in considerazione la possibilità di suddividerli in classi di supporto.

Controlli multipli con View Controller come origine dati

Se sullo schermo sono presenti numerosi controlli con View Controller come origine dati, prendere in considerazione la possibilità di suddividerli in oggetti di origine dati separati e farli diventare origine dati. Oppure puoi anche suddividerli in View Controller separati (ad esempio se View Controller ha una vista tabella oltre ad altri controller, puoi suddividerli nella propria classe Controller View tabella).

Codice duplicato

Se hai lo stesso identico codice in diversi View Controller lo metti in 1 posizione condivisa. Ciò renderà il tuo codice riutilizzabile e aiuterà a gestire la complessità.

Ecco alcuni consigli aggiuntivi per ridurre al minimo la complessità di View Controller:

Storyboard anziché Programmatic

Creare elementi di visualizzazione è un sacco di codice e il codice di geometria del fotogramma è anche molto lavoro. Se non lo ritieni già, puoi utilizzare i vincoli di layout automatico e inserire il maggior numero possibile di elementi View nello storyboard.

Codice / commenti non necessari

Assicurati anche di rimuovere codice / commenti non necessari. Un sacco di volte un nuovo file del controller di visualizzazione verrà fornito con metodi che non stai utilizzando. Se non stai usando un metodo come didReceiveMemoryWarning , allora è sicuro portarlo fuori. Inoltre, poiché il file del controller di visualizzazione è così grande a volte è spaventoso rimuovere il vecchio codice oi commenti. Non metterlo fuori! Aumenta solo la complessità.

Notifiche

Per rispondere alla tua domanda sulle notifiche: Le notifiche non sono un martello d'oro da usare con tutto. Trovo che le notifiche siano utili quando più controllori di vista devono aggiornarsi contemporaneamente a causa di 1 azione particolare. Fai attenzione però con le notifiche, il loro uso eccessivo può causare un sacco di dolore nel tentativo di rintracciarli.

    
risposta data 07.01.2015 - 14:49
fonte
2

C'è un'architettura speciale che chiamano VIPER (View, Interactor, Presenter, Entity and Routing). Cercherò di riprendere qui quello che ti serve sapere:

Visualizza

  • sono viste fittizie;
  • contengono oggetti come UIView, UIViewController, UILabel, ecc;
  • attende il contenuto da Presentatore ;
  • gestisce l'interazione dell'utente e lo passa al livello Presentatore .

Presenter

  • non conosce gli oggetti dell'interfaccia utente;
  • ottieni input da Visualizza layer;
  • gestisce la logica di visualizzazione (aggiungerà il metodo presenterà un'altra schermata);

Routing

  • gestisce la logica di navigazione e le animazioni di transizione;
  • conosce oggetti come UINavigationController, UIWindow, ecc.

Quindi, cosa penso che pulirai nel tuo codice:

  • le convalide dei dati si sposteranno su Presenter ;

  • la navigazione si sposterà su oggetti Wireframe (strato Routing );

  • dividi il tuo controller di visualizzazione osservando il principio DRY ;

  • Gli schermi complessi avranno due o più viste e presentatori.

Dovresti vedere il seguente link sull'architettura VIPER link

Buona fortuna!

    
risposta data 02.08.2015 - 04:21
fonte

Leggi altre domande sui tag