Diciamo che ho un'applicazione che salva e recupera i suoi dati da / verso DB. Per ragioni di spiegazione, immaginiamo che l'applicazione si occupi degli studenti.
Ho un'API completa che mi consente di lavorare con le classi di business logic e di salvarle / caricarle senza problemi dal / al database. Così posso istanziare uno "Studente", quindi chiamare qualche funzione Save(Student)
, e sarà correttamente salvato nel DB (con tutte le connessioni ad altre entità gestite correttamente).
Ora diciamo che ho bisogno di creare una nuova finestra ( vista ) nella mia GUI per implementare alcune nuove logiche di business. La mia nuova vista verrà chiamata dalla finestra principale dell'applicazione quando gli utenti preme un pulsante di menu.
Ho creato la vista , il modello (una classe che esegue la necessaria manipolazione dei dati e salva i risultati nel DB) e il controller (che funge da colla tra il modello e la vista ). Funziona tutto bene. Ora la mia domanda è: quando e dove istanziare il modello ?
Attualmente lo faccio nel gestore di eventi della finestra principale, che apre la mia finestra di dialogo, come questa (pseudocodice):
MainWindow::OnMyDialogRequested()
{
Model model;
Controller controller(model);
GUI gui(controller);
gui.exec();
}
La GUI è di tipo stateless quindi va bene se tutto muore quando l'utente finisce di lavorarci. Quando la GUI si avvia, visualizza una schermata iniziale e (tramite il controller ) richiede il modello per preparare i dati. Quando la GUI muore, chiede al modello (anche tramite il controller) di salvare i dati nel DB.
Tuttavia, sono preoccupato che l'istanziazione del "modello" e il controller in questo modo potrebbero essere una pessima decisione di progettazione. Come faccio a farlo correttamente?