come dovrebbe il modello MVP gestire le viste create in fase di runtime?

1

come dovrebbe il modello MVP gestire le viste create in fase di runtime?

ad esempio

C'è una mainView (che ha un modello e un presentatore) che deve visualizzare un elenco, ogni elemento nella lista è rappresentato dalla sua vista, listItemView (che ha anche il suo modello e presentatore).

è necessario creare listItemViews in fase di esecuzione, insieme ai relativi modelli e relatori e devono essere tutti collegati.

La soluzione che ho trovato è quella di fare in modo che mainPresenter esegua tutte le creazioni, crea i relatori, i modelli e crea anche le viste utilizzando una fabbrica astratta.

Il mainPresenter quindi collegherà tutto, passerà la vista appena creata a mainView usando un metodo AddUiEelement che ho implementato tutte le viste. Il mainPresenter avrà anche un elenco di listItemPresenters che aggiungerà tutti i listItemPresenters che crea in fase di runtime.

Funziona tutto come mi aspetto, ma riesce anche a separare la tecnologia dell'interfaccia utente dal presentatore in quanto la fabbrica astratta incapsula tutta la logica di creazione dell'interfaccia utente, tuttavia mi sembra quasi una trappola, o almeno inelegante.

Sto reinventando la ruota, questo è un problema comune che è stato risolto in un modo migliore, mi piacerebbe vedere una soluzione migliore.

questo è tutto usando .net winforms ma ho bisogno di una soluzione per winforms / wpf e JavaFX

    
posta user1450877 26.10.2017 - 13:53
fonte

1 risposta

1

Dipende dal motivo per cui stai creando viste in fase di runtime.

Può sembrare un'iniezione di dipendenza o una maledizione ossessiva immutabile, ma se il tuo oggetto ha bisogno di A, B e C ma solo A e B esistono all'avvio del programma, allora non puoi creare il tuo oggetto finché C non esiste. Davvero se non c'è nulla di utile da fare per il tuo oggetto quando ha solo A e B, allora in realtà non ha senso dargli un setter per C.

Piuttosto, creerei un oggetto diverso che prende A e B e quando in seguito ha passato un C, lancia un nuovo oggetto diverso che ha A, B e C ed è pronto per essere usato. Questa può essere la tua vista creata in fase di runtime.

Questa è una fabbrica ma non notare che qui non doveva essere statico. Dovevo solo ricordare dove l'avevo messo.

    
risposta data 26.10.2017 - 16:47
fonte

Leggi altre domande sui tag