L'app che sto sviluppando deve visualizzare elenchi di elementi. Abbastanza semplice, ma ci sono un certo numero di cose che possono cambiare in base all'input dell'utente:
- Gli articoli possono essere aggiunti / rimossi dall'elenco.
- Gli articoli nell'elenco possono essere aggiornati. Più articoli possono essere aggiornati contemporaneamente!
- I filtri possono essere aggiornati. Più filtri possono essere aggiornati contemporaneamente!
- L'ordinamento degli articoli può cambiare.
Informazioni potenzialmente pertinenti:
- È un'app Java multipiattaforma.
- Una delle piattaforme su cui distribuiamo è MIDP, in modo da limitare le funzioni / librerie / ecc. della lingua che possiamo usare.
- L'implementazione è attualmente suddivisa in una classe del modello (nel codice comune) e in classi di visualizzazione / controller specifiche del dispositivo.
Ho provato un paio di approcci per progettare un'implementazione di lista adatta, ma entrambi hanno degli svantaggi:
Approccio 1:
Le implementazioni del controller specifico della piattaforma sono responsabili della chiamata di un metodo refresh()
ogni volta che succede qualcosa che potrebbe cambiare la lista.
Questo approccio mantiene l'implementazione della classe di lista (modello) abbastanza semplice, ma lascia molta della responsabilità fino alle implementazioni specifiche del controller della piattaforma. Più logica c'è in queste classi, maggiore è la possibilità che gli errori si insinuano. Incoraggia inoltre i controllori a notificare direttamente la visualizzazione degli aggiornamenti, il che sembra un cattivo design.
Approccio 2:
Il modello è interamente responsabile dell'innalzamento di eventi per notificare le visualizzazioni specifiche della piattaforma delle modifiche. Gli elementi dell'elenco, i filtri e gli ordinatori comunicano al modello quando cambiano, quindi avvisano le viste delle modifiche.
Ciò mantiene le classi specifiche della piattaforma molto più semplici e sembra un design più strong (minore accoppiamento tra le classi, ecc.). Tuttavia, l'implementazione della classe list diventa molto più complicata.
Il mio problema principale con questo approccio riguarda una proliferazione di eventi quando più elementi / filtri vengono aggiornati in un'unica operazione.
Le mie domande:
- Ci sono altri approcci che potrei / dovrei provare?
- Esiste un modo riconosciuto di gestire / evitare l'esplosione di eventi nell'approccio n. 2?