Probabilmente dovrei aprirlo dicendo che faccio principalmente applicazioni Web al lavoro, che ovviamente hanno alcune differenze importanti rispetto alle tipiche applicazioni desktop.
Ho avuto un piccolo programma Windows Form che avevo creato per me stesso. Mentre andavo ad aggiornarlo e aggiungere alcune cose, ho scoperto che la logica del programma e della presentazione era troppo strettamente accoppiata ed era sgradevole. Per prima cosa ho rotto le cose usando il pattern MVP e avendo relatori separati che interagiscono solo con i moduli attraverso un'interfaccia. È stato un inizio, ma avevo ancora il problema che quando un pulsante si apriva in una forma diversa, il mio modulo doveva sapere quale forma avrebbe chiamato e quali dipendenze o il suo presentatore aveva.
Dopo aver riflettuto un po ', sono arrivato e ho implementato questo progetto: un singleton ha un evento diverso per tutti i diversi tipi di finestre che potresti voler aprire insieme agli argomenti degli eventi personalizzati che contengono tutte le informazioni contestuali di cui potrebbero aver bisogno. Una classe diversa è responsabile della registrazione degli ascoltatori a questi eventi e dell'utilizzo di un contenitore di iniezione delle dipendenze per recuperare qualsiasi dipendenza, ottenere il presentatore, ottenere la finestra, collegarli e mostrare la finestra. Quando voglio un'azione per far aprire una finestra, invece di costruire direttamente una nuova finestra, posso semplicemente sollevare l'evento in questione, ovvero potrei anche andare a scambiare, ad esempio, un modulo WPF e non dover cambiare qualsiasi codice che potrebbe causarne l'avvio.
In un certo senso, questo avvicina un po 'le cose al modello "apolide" con cui ho più familiarità. Sembra funzionare bene e trovo il codice più semplice da utilizzare. Tuttavia, dopo aver fatto qualche ricerca, non riesco a trovare nessun altro che usi questo tipo di modello, il che mi dà un po 'di pausa. Ci sono alcuni svantaggi in questo modello, o è un buon modo per incoraggiare un accoppiamento più libero tra forme diverse in un'applicazione GUI?