È sbagliato passare il modello concreto attraverso la vista al presentatore con MVP 'Passive View'

0

Ho cercato di implementare Passive View MVP nella mia applicazione WinForms il più possibile. Il Presenter è l'unico che usa il Modello e il Presentatore risponde agli eventi generati nella Vista. La vista infatti è molto "stupida" poiché attiva solo eventi e si occupa dei controlli del modulo.

Ora la mia domanda, è sbagliata, o molto 'anti-pattern' che la Vista è creata con un Modello concreto che poi passa al Presentatore?

Ho bisogno di questo per poter testare correttamente il mio Presenter.

Visualizza costruttore

public HomeScreenView(IAssessmentModel model)
{
    InitializeComponent();
    homeScreenPresenter = new HomeScreenPresenter(this, model);
}

Il test del presentatore si inizializza

[TestInitialize()]
public void TestInitialize()
{
    model = new MockAssessmentsModel();
    view = new MockHomeScreenView(model);
    presenter = view._presenter;
}
    
posta Marthe Veldhuis 20.10.2016 - 10:17
fonte

2 risposte

2

Sembra che tu abbia provato a implementare un meccanismo di iniezione delle dipendenze nel Presenter, ma non è riuscito a farlo nella Vista.

Il punto di MVP, in particolare Passive-View MVP, è che la vista è il più stupido possibile. Quando si passa un modello alla vista, la vista può ora indirizzare il livello aziendale, che è contro lo scopo fondamentale di questo modello.

Suggerirei di utilizzare un contenitore per l'iniezione delle dipendenze. Se ti ostini a codificare con cura le dipendenze, forse sarebbe meglio istanziare il Modello dal Presenter stesso e ridurre al minimo il numero di dipendenze concatenate.

    
risposta data 12.11.2017 - 20:52
fonte
0

Non lo classificherei come assolutamente sbagliato. Serve uno scopo molto valido, ma preferirei vedere quale processo è effettivamente responsabile della creazione della vista. Se tale visualizzazione è costruita da un altro relatore, potrebbe essere possibile semplicemente creare nuovamente l'HomeScreenPresenter dall'inizio e fornire tale visualizzazione. Richiederebbe un qualche tipo di metodo TakeView sul relatore per assicurarsi che una volta che la vista sia stata configurata, il presentatore possa trascinare tutti i dati nella vista. Se ti limiti a fornire il modello al costruttore, sarebbe piuttosto una convenzione che dovrai applicare per garantire che la vista non funzioni direttamente sul modello.

    
risposta data 15.06.2017 - 16:23
fonte

Leggi altre domande sui tag