Progettazione per un framework di applicazione che consentirà a ciascuna implementazione di personalizzare parti dell'interfaccia utente

9

Ho il compito di progettare un framework applicativo che consenta a ciascuna implementazione di personalizzare parti dell'interfaccia utente. Uno di questi esempi sarebbe che l'implementazione (chiamiamola client d'ora in poi) possa definire le celle della vista di raccolta da restituire per una schermata specifica. Il framework è semplicemente responsabile della distribuzione degli oggetti appropriati per rendere la creazione di un'app molto più semplice poiché creeremo diverse istanze simili.

Il mio attuale approccio al framework è stato quello di progettare un Controller di Coordinamento che sia responsabile di tutti gli eventi di presentazione e licenziamento in tutta l'App. Il controller di coordinamento predefinito distribuisce tutti i controller di visualizzazione predefiniti all'interno del framework che eseguono tutte le attività pertinenti senza fornire necessariamente un'interfaccia utente configurata. Ad esempio: un controller mostrerà una vista di raccolta con celle modello e niente di speciale. Il vantaggio di questo design è che rimuove l'accoppiamento tra i controller e consente inoltre a un client di ignorare il coordinatore predefinito e restituire un controller di visualizzazione completamente nuovo per un'attività specifica.

Il problema che sto avendo è come dovrei progettare questo framework per consentire a un client di aggiungere la propria interfaccia utente personalizzata nell'app.

Approccio 1

Fai in modo che il framework richieda una view factory e lasci che questa view factory sia responsabile della distribuzione di tutte le viste pertinenti. Pertanto, nel Delegato app potremmo fare in modo che il client crei una CollectionViewCellFactory per esempio e l'interfaccia definisca tutte le celle che qualsiasi classe conforme dovrà fornire. Ho ereditato una base di codice con questo design e me ne sono allontanato perché era troppo astratto e personalizzabile. È arrivato con tonnellate di fabbriche per ogni aspetto dell'App e questi giorni aggiunti al tempo di installazione di ogni App.

Approccio due

Ogni controller di visualizzazione specifica hook di sottoclassi o API di configurazione che consentiranno la definizione di queste classi di UI personalizzate in fase di runtime (in modo simile a come UISplitViewController consente ai chiamanti di configurare i controller utilizzando la proprietà viewControllers). Per fare ciò, ciascun cliente si limiterà a sottoclasse il controllore di base di base e in ogni presentazione dei controllori; imposta i valori appropriati sul controller in modo che raggiunga l'interfaccia utente desiderata. Qualcosa come

viewController.registerReusableCellsBlock = ^(UICollectionView *collectionView){
   //perform custom registration
}

viewController.cellDequeueBlock = ^UICollectionViewCell<SomeProtocol> *(UICollectionView *collectionView,NSIndexPath *indexPath){
   //dequeue custom cells
}

Al momento, separo l'origine dati per una vista in un oggetto separato per promuovere la riusabilità e prevenire il gonfiore di ViewController. Questo rende la sottoclasse del controller di visualizzazione per fornire l'interfaccia delle celle un po 'più difficile ma non impossibile.

Approccio 3

Forse è una cattiva idea tentare di progettare un framework e anticiparne l'utilizzo. Forse l'opzione migliore è quella di consentire la sottoclasse con il massimo controllo, anche se il costo di installazione è relativamente alto. Quindi, dopo averlo creato per diversi client, potrei notare i pattern che emergono e iniziare l'ottimizzazione lungo il percorso.

Capisco come renderlo personalizzabile all'interno del framework, quello con cui sto combattendo è come definire al meglio un'interfaccia che definisca i potenziali punti di personalizzazione del framework da parte del client.

TL; DR

La parte più complicata dell'interfaccia riguarda una vista raccolta nidificata all'interno di celle vista collezione. Ciò consente il paging orizzontale e lo scorrimento verticale delle celle. Ciò si ottiene avendo una sorgente dati che gestisce le celle orizzontali e configura la vista raccolta di ogni cella con una nuova sorgente di dati.

Come si progetta un'interfaccia che consente a tutte queste celle di essere personalizzabili?

    
posta Daniel G 22.10.2014 - 18:43
fonte

1 risposta

1

Questa è una domanda vecchia ma degna che non ha mai avuto una risposta degna, che, in base alla mia esperienza, in risposta a

How would one design an interface that allows all these cells to be customizable?

è- non farlo.

Vincolare le scelte che un cliente può fare nella personalizzazione - sia nell'interfaccia utente che in qualcos'altro - è quasi sempre meglio per il venditore - perché semplifica la soluzione e riduce il carico di supporto - e anche per il cliente - perché poi sono la maggior parte in grado di sfruttare l'esperienza del fornitore per arrivare al punto debole dello spazio della soluzione, senza perdere tempo a reinventare la ruota.

Se hanno bisogno di una soluzione diversa, te lo diranno. Se insistono sulla personalizzazione, hanno bisogno di una soluzione diversa e semplicemente non lo sanno ancora.

    
risposta data 05.04.2018 - 14:39
fonte

Leggi altre domande sui tag