Sto cercando di capire come deve essere implementato MVP al livello UserControl . Pensavo di averlo fatto, ma alla fine ho letto un post sul blog che mi ha praticamente bloccato. Ora sono tornato all'inizio e non ho idea di come procedere.
Diciamo che il mio UserControl è qualcosa di semplice come due TextBox es e un ComboBox . Questo viene richiamato da un modulo principale (che ha una propria View e Presenter). Ora, il modo in cui comprendo MVP è che il Main Form Presenter deve richiamare un secondo relatore per gestire tutte le comunicazioni con UserControl che viene rilasciato lì.
Ed è qui che mi sento completamente perso. Le mie implementazioni precedenti di UserControl s (prima che apprendessi MVP) incorporavano sempre la logica dietro il controllo (ad esempio la selezione ComboBox cambierà l'etichetta di testo relativa a TextBox1 ). Pertanto, l'implementazione di UserControl viene eseguita trascinandola sul designer e quindi chiamando comandi come UserControl1.Update() o UserControl1.DisplayData(data) .
In qualsiasi% di terze parti% co_de, tutti i comandi a UserControl vengono eseguiti dai comandi al controllo. Non esiste un "presentatore" che deve essere invocato, ad esempio, quando rilascio un UserControl o un ComboBox o qualsiasi altro controllo WinForms sul mio modulo. Tuttavia hanno una logica interna che determina come vengono visualizzati e, nella sostanza del testing, dovrebbe avere una separazione "presentatore" su di esso da qualche parte .
I ho pensato che una buona soluzione sarebbe che il costruttore del mio ListView avrebbe creato un Presenter. Qualsiasi comando verso UserControl verrà delegato direttamente al Presenter. Ciò consentirebbe al mio UserControl di avere la propria logica di presentazione separata dalla sua "vista", in modo tale che io possa testarla e in modo tale che l'implementatore (il modulo principale) debba solo rilasciare il UserControl ed eseguire riceve come parte della sua logica di presentazione locale. UserControl ha la sua logica di presentazione lasciata invisibile all'implementatore.
E proprio quando pensavo di aver capito tutto, scopro che è una cattiva pratica (The Self -Aware View) . Quindi supplico le persone che lo capiscono meglio di me: come faccio a costruire un UserControl che mantenga la logica di presentazione invisibile all'utente finale, così che non debba costruire il presentatore di wrapping nel mio Main Form, < strong> senza violare i principi che Matt Wynne discute nel post collegato sopra?
O sto completamente fraintendendo il concetto di MVP qui?