93 messaggi dal 25 maggio 2005
Ciao a tutti,

da qualche giorno mi sono messo in testa di fare un'applicazione WindowsForm utilizzando il pattern MVP PassiveView. Non è tanto questo che mi sono messo in testa, ma il fatto di VOLERLO fare PULITO, a regola d'arte, e non come le miriadi di esempi stupidi e a volte anche sbagliati che si trovano su internet!!!!!!!!!!
Anche mia nonna è capace a fare un'unica form, con 2 textbox ed un pulsante!!!!!!!!!!

Ma veniamo al mio problema ed ai miei dubbi:
1.Qual'è la partenza? Come parte un'applicazione WindowsForm con MVP?
La classica versione che ho trovato, è che lo static Main del program.cs, fa partire la prima form nella maniera standard, senza nemmeno una modifica. È poi il costruttore/load della form che istanzia il model ed il presenter.

la seconda versione che ho visto è:
static void Main() {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    IView view = new frmView();
    IPresenter presenter = new Presenter(view);
    presenter.Load();
}

dove nel presenter.Load() c'è questa riga di codice: view.Show(); che a sua volta nella view contiene: Application.Run(this);

sinceramente il primo modo fa molto web (asp.net), mentre il secondo mi pare più strutturato.
Quale sarà quello giusto?


2.Come faccio ad aprire una seconda finestra da un pulsante?
Ovvero, nella form principale, ipotiziamo di avere un pulsante che deve aprire una dialog modale. Anche in questo caso ne ho viste di tutti i colori, mentre una soluzione valida non l'ho trovata.
Ecco alcune possibili implementazioni:
A)
I presenter sono salvati nello stesso progetto della UI, assieme alle Form, quindi il presenter fa tranquillamente
IDialogView dlg = new DialogForm();
dlg.showDialog();

ma in questo caso, mi pare che il presenter sia fortemente legato all'implementazione della UI.

B)
mmmmm, mi sa che non ho visto altro di decente!!!!!!


Ora, io non saprei proprio dove sbattere la testa!!!!!! Dopo 2 giorni sono arrivato a questa soluzione:
per quanto riguarda la partenza del programma, mi sono rifatto al modello web, e quindi il program apre la prima form, lei stessa istanzia il model e il presenter:
private void frmFattura_Load(object sender, EventArgs e) //forse è meglio l'evento Init??
{
    _presenter = new Presenter(this, new Model());
    _presenter.Init();
}


visto questo approccio, ho pensato di mantenerlo anche per le altre form.
Normalmente in una form, quando clicco su un pulsante, parte l'evento pulsante_click associato, e qui dentro faccio un eventuale
frmDialog dlg = new frmDialog();
dlg.ShowDialog();

Trasformo questo in MVP passiveView:
al click del pulsante, dentro il metodo gestore pulsante_click, non faccio altro che lanciare un evento richiestaDialog().
Il presenter intercetta l'evento e richiama un metodo della IView che si chiama VisualizzaDialog(),
la mia frmFattura implementa questo metodo con le due righe scritte sopra.

A sua volta la frmDialog, nel suo load/init, crea il suo presente, se necessario il model, ed il giro è concluso.


Io non so se ho fatto le cose nel modo giusto, spero di essermi spiegato ed aver illustrato nel modo corretto il problema. A questo punto chiedo a chiunque abbia avuto esperienza su questo, di darmi gentilmente qualche delucidazione in merito ;-))

ciao a tutti e grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.