Views: ViewControllers, molti a uno o uno a uno?

2

Ho sviluppato un'applicazione Android in cui, in genere, ogni vista ( layout.xml ) visualizzata sullo schermo ha il proprio frammento corrispondente (ai fini di questa domanda potrei fare riferimento a questo come ViewController ).

Queste viste e Fragments / ViewControllers hanno un nome appropriato per riflettere ciò che visualizzano. Quindi questo ha l'effetto di consentire al programmatore di individuare facilmente i file associati a ciò che vedono su qualsiasi schermo.

Quanto sopra si riferisce alla parte da uno a uno della mia domanda.

Si noti che con quanto sopra ci sono alcune eccezioni in cui molto simile è visualizzato su due viste, quindi il ViewController viene usato per due viste. (Utilizzando un semplice interruttore (tipo) per determinare quale file layout.xml caricare)

Il rovescio della medaglia. Attualmente sto lavorando alla versione iOS della stessa app, che non ho sviluppato. Sembra che stiano adottando più di un approccio uno-a-molti ( ViewController : View ).

Sembra esserci un ViewController che gestisce la logica di visualizzazione per molti diversi tipi di visualizzazioni. Nel ViewController sono un assortimento di flag booleani e di matrici di dati (da visualizzare) che vengono utilizzati per determinare quale vista caricare e come visualizzarla.

Questo mi sembra molto complicato e, in assenza di commenti / nomi variabili ambigui, trovo molto difficile implementare modifiche nel progetto.

Cosa ne pensate dei due approcci? Quale preferiresti? Sto davvero pensando di impiegare un po 'di tempo extra al lavoro per ridefinire iOS in un approccio più 1: 1.

Il mio ragionamento per 1: 1 su M: 1 è quello della modularità e della leggibilità. Dopotutto, alcune persone non misurano la qualità del codice in base a quanto è facile per un altro sviluppatore cogliere il regno o quanto è facile estrarre un pezzo di codice e utilizzarlo da qualche altra parte?

    
posta jim 21.11.2012 - 11:06
fonte

4 risposte

1

Prima di tutto Android e iOS sono piattaforme diverse, ciò che è molto efficiente in uno, potrebbe non essere così buono nell'altro. Ma sinceramente, non ne ho idea, perché non li ho letti. Io uso l'approccio 1: 1 perché è facile e non ho mai avuto problemi di prestazioni che mi hanno portato in quell'area.

Per quanto riguarda la qualità del codice, hai ragione. La leggibilità e "quanto sia facile tirare un pezzo di codice" è una misura provocatoria. A volte lascio un codice inefficiente con un commento solo per poter poi capire cosa diavolo ho fatto lì.

Per il tuo problema, sta a te decidere se vuoi essere un bravo ragazzo e renderlo facile al programmatore successivo o semplicemente portare a termine il lavoro. (considera: il prossimo programmatore sarai tu?)

    
risposta data 21.11.2012 - 11:24
fonte
1

There appears to be one ViewController that handles the display logic for many different types of views. In the ViewController are an assortment of boolean flags and arrays of data (to be displayed) that are used to determine what view to load and how to display it.

È tipico nelle app iOS avere un'istanza del controller di visualizzazione per ogni "screenful" di contenuto, ad esempio una vista e le sue sottoview, simile a ciò che si otterrebbe da un layout in Android. Se l'app su cui stai lavorando utilizza un singolo oggetto controller di visualizzazione o anche istanze separate della stessa classe di controller di visualizzazione, per gestire un numero di schermate diverse probabilmente hai ragione che il codice debba essere refactored. Prima di entrare in questo progetto, leggi la Guida alla programmazione dei controller di Apple in modo da avere una solida comprensione di come i controller di visualizzazione interagiscono in iOS.

    
risposta data 21.11.2012 - 12:43
fonte
0

Non preferirei neanche io, preferirei quello che ha meno if, switch, variabili di stato ausiliarie e duplicazione del codice.

Di solito è 1: 1 con classi ausiliarie che si occupano di visualizzare le informazioni che appaiono in più punti, ma questa non è la regola. La regola è quella che ha meno rami senza causare la duplicazione del codice in quella particolare situazione.

    
risposta data 21.11.2012 - 13:53
fonte
0

Divulgazione - il mio approccio può o meno allinearsi con interpretazioni severe di MVC, MVP o MVVM. Ma si basa sulla mia esperienza nel lavorare con questi approcci.

In generale, un VC dovrebbe avere solo un View , ma ciò dipende principalmente dal fatto che non avrai molte sovrapposizioni tra Views . Penso che l'aspetto più importante sia l'indifferenza sulla parte di VC su cosa sia effettivamente View . Quindi, se hai bisogno di if e switch istruzioni per accoppiare il tuo VC al tuo View , allora penso che qualcosa non va.

Il VC è lì per indirizzare i dati a View , ma non gli interessa sapere come View presenta i dati poiché questo è il lavoro di View . Allo stesso modo, View non si preoccupa di come VC ottiene i dati, ma sa solo che lo farà. È davvero la separazione delle responsabilità che è importante.

"Bene, è grandioso" (~ Denis Leary) ma non risolve i problemi in cui si verificano duplicazioni su View s. Questo è il punto in cui prenderei un approccio leggermente bastardizzato e consentire a VC di essere composto da altri VC s ma mantenere una relazione dell'1% diView a 1% diVC. Il "contenere" VC s si legherà a un View ma al "contenuto" (figlio, i membri del contenitore VC, qualunque cosa tu voglia chiamare) non avranno necessariamente un View al quale sono vincolati. Ciò fornisce un grado di riutilizzo all'interno del codice senza cose eccessivamente confuse. Vola di fronte ad alcuni dei paradigmi, quindi vorrei commentare quello che stai facendo.

In definitiva, avrai un VC che gestisce il recupero | manipolando i dati che vengono visualizzati su più View s. Ma avrai bisogno di un "layer" aggiuntivo di VC s per mantenere pulita la struttura del codice.

In alternativa, basta duplicare il codice al livello VC e riutilizzare le chiamate su Model . Non sono un grande fan di questo perché mi piace pensare in termini di widget riutilizzabili quando metto insieme il mio View se ViewController s.

    
risposta data 21.11.2012 - 15:50
fonte

Leggi altre domande sui tag