La domanda potrebbe essere complicata (a causa della sua natura o del mio modo di descriverla), quindi leggi davvero questo prima di rispondere.MVC per app desktop senza livello dati
Ho questa app per scrivere:
a) app per desktop;
b) nessun livello dati nel senso di database, file o qualsiasi altro repository (non è necessario salvare, memorizzare o caricare dati);
c) l'app avrà implementato alcuni algoritmi di calcolo (Algoritmo genetico);
b) fornisce la GUI che visualizzerà i controlli per i risultati di app e calcoli.
Sto pensando di utilizzare il pattern MVC ma ho dei dubbi su come utilizzarlo. Dal momento che non ho un livello dati nel senso (ad esempio) del database (i dati vengono generati durante l'esecuzione in base all'input dell'utente), sono preoccupato del modo di utilizzare MVC in questa implementazione. Finora mi sono venuti in mente due approcci:
GUI è la vista. GeneticAlgorithm è il controller. GeneticAlgorithmResults è il modello (come classe che memorizza solo i dati). Flusso di base:
- La vista invia l'input dell'utente al controller;
- Il controller sta elaborando l'input dell'utente e genera dati;
- Il controller invia i dati generati al modello;
- Il modello notifica la visualizzazione dei nuovi dati;
- La vista estrae nuovi dati e aggiorna il display.
GUI è la vista. AppEngine è il controller. GeneticAlgorithm nad GeneticAlgorithmResults sono il modello. Ora abbiamo:
- La vista invia l'input dell'utente al controller;
- Il controller sta elaborando l'input dell'utente e invia segnali di controllo al modello.
- Il modello aggiorna il suo stato interno (genera nuovi dati);
- Il modello notifica al controller i nuovi dati;
- Il controller estrae i dati sul modello;
- Il controller elabora i dati;
- Il controller invia i dati elaborati alla vista;
- La vista aggiorna il display.
Primo approccio sembra essere più semplice e più come MVC. Il problema è che alcune logiche dovrebbero essere nel modello: decidere quando notificare il modello, poiché non tutti gli aggiornamenti dei dati verranno visualizzati, o forse la visualizzazione verrà aggiornata con i set di dati, non ogni piccola modifica. Queste decisioni saranno basate sull'input dell'utente. Qualche altra elaborazione aggiuntiva dei dati potrebbe essere necessaria prima della visualizzazione effettiva. Questo sarebbe nella vista.
D'altro canto, il secondo approccio sembra essere più complicato e sembra che molti messaggi vengano passati per raggiungere l'obiettivo.Ma dà il controllo completo della logica al controller e separa le responsabilità della vista, del controller e del modello (che è lo scopo principale di MVC).
Quale approccio consiglieresti? O forse dovrei mescolarli e usare l'architettura del primo approccio con il flusso di comunicazione dal secondo approccio? O qualche altro design?