Posizione Sub Main nel pattern MVP

di il
4 risposte

Posizione Sub Main nel pattern MVP

Buongiorno a tutti. Faccio una domanda "didattica", anche se ho paura che la risposta secca sia "dipende!".
Tenete conto che sono un dilettante, nel senso letterale del termine, ovvero faccio programmazione per diletto e da autodidatta.

In un progetto in VB.NET che usa WinForms, sto provando a ricreare una struttura 3-tier "casalinga" che penso possa essere inquadrata entro il pattern architetturale MVP.
Infatti il componente intermedio (presenter) legge i dati dal model e li espone come proprietà osservabili, mentre le azioni di edit vengono implementate sempre entro il presenter sotto forma di comandi invocabili.

La domanda è: in uno schema simile, dov'è più giusto collocare il punto di ingresso dell'applicazione? O, più correttamente: quale dei due componenti (presenter e view) è più logico che costituisca l'eseguibile (mentre l'altro sia invece una dll)?

4 Risposte

  • Re: Posizione Sub Main nel pattern MVP

    Mi son reso conto di aver omesso un'informazione cruciale senza la quale la domanda ha poco senso.

    Da come è stata posta, la risposta alla domanda è che l'exe deve obbligatoriamente implementare la parte view, perché è questa che referenzia (secondo la logica del pattern) la parte presenter e non viceversa.

    L'intenzione che ho dimenticato di dire è che pensavo alla possibilità di mettere il presenter nell'exe e rendere la view una sorta di plugin (o meglio skin) da caricare in fase di esecuzione. In questo modo il presenter nell'exe non necessita di dipendenze verso la dll della view (causando cioè riferimenti circolari). Inoltre in questo modo, dovrebbe essere possibile sostituire l'interfaccia grafica senza dover apportare modifiche all'eseguibile.

    Ok, sono pronto al patibolo
  • Re: Posizione Sub Main nel pattern MVP

    Antologiko ha scritto:


    La domanda è: in uno schema simile, dov'è più giusto collocare il punto di ingresso dell'applicazione? O, più correttamente: quale dei due componenti (presenter e view) è più logico che costituisca l'eseguibile (mentre l'altro sia invece una dll)?
    Il punto di ingresso dell'applicazione può rimanere quello tradizionale se il Form principale non implementa di fatto un "presenter" particolare ma funge solo da shell di attivazione della vista che deve essere creata al suo interno.
  • Re: Posizione Sub Main nel pattern MVP

    Alka ha scritto:


    Il punto di ingresso dell'applicazione può rimanere quello tradizionale se il Form principale non implementa di fatto un "presenter" particolare ma funge solo da shell di attivazione della vista che deve essere creata al suo interno.
    Ciao, non ho ben capito. Se l'eseguibile è l'assembly contenente l'interfaccia grafica (in questo caso si dice che implementa la view?), è chiaro che deve prima o poi avviare un form, indipendentemente dal fatto che il punto di ingresso sia la sub Main o il Form principale (quest'ultima scelta non mi è mai piaciuta per la verità, preferisco avviare sempre da sub main).

    Attualmente nel costruttore di ciascun form creo l'oggetto che costituisce il relativo presenter e ne effettuo una sorta di binding.
  • Re: Posizione Sub Main nel pattern MVP

    Antologiko ha scritto:


    Se l'eseguibile è l'assembly contenente l'interfaccia grafica (in questo caso si dice che implementa la view?)
    Si dice che "implementa la view" quando ci si riferisce a un Form che implementa nella sua dichiarazione l'interfaccia (intesa come interface) che rappresenta la View. Che sia implementata in una Class Library o in un eseguibile, poco importa.

    Antologiko ha scritto:


    è chiaro che deve prima o poi avviare un form, indipendentemente dal fatto che il punto di ingresso sia la sub Main o il Form principale (quest'ultima scelta non mi è mai piaciuta per la verità, preferisco avviare sempre da sub main).
    La Sub Main nella maggior parte delle applicazioni che prevedono una interfaccia grafica non fanno altro che creare il Form principale e avviare l'oggetto Application con quella finestra, affinché continui a eseguire fino a quando la finestra non viene chiusa.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
4 risposte