thus it is instantiated in the front end.
Potrebbe sembrare un dettaglio, ma la frase corretta dovrebbe essere "È iniziata nel front-end".
Ciò che intendo è che View
indica Controller
: "Esegui azione 52". (esempio immaginario, reso estremo solo per fare un punto).
Il View
non si preoccupa affatto dell'azione 52. Potrebbe essere il riavvio del gioco, potrebbe cambiare la difficoltà, potrebbe essere un sacco di altre cose. Ma nessuno di questi è importante per View
. È sufficiente che l'utente abbia premuto un determinato pulsante e fare clic su quel pulsante significa dire a Controller
di "fare azione 52".
Il Controller
della sua parte non si preoccupa del perché View
gli dica di "fare l'azione 52". Potrebbe essere stato perché l'utente ha premuto un determinato pulsante. Potrebbe essere un comando automatico in un framework di test. Semplicemente non mi interessa. Tutto ciò che importa è che ora deve "fare azione 52".
E Controller
sa cosa deve accadere ora. Deve dire al backend "impostare il livello di difficoltà su 3". Ma ancora una volta, il Controller
non ha davvero bisogno di sapere una cosa su quali siano i livelli di difficoltà. È qualcosa a cui il backend si prenderà cura. Tutto il Controller
è che dice al backend che il livello di difficoltà è ora 3 e che il backend dovrebbe rispondere con un nuovo level
che dovrebbe essere presentato all'utente.
Ora, in pratica, naturalmente non creerai il View
per chiamare una stringa arbitraria come "do action 52". Perché tu come programmatore sai cosa dire al controller. E che questo messaggio dalla vista a Controller
debba essere una chiamata al metodo prepareLevel(3)
. Questo lo rende molto più leggibile per te, ma non cambia il fatto che View
continua a non preoccuparsi di cosa dovrebbe accadere quando viene chiamato quel metodo. Non è una sua responsabilità. L'unica responsabilità di View
è chiamare quel metodo specifico se l'utente ha fatto clic su quel pulsante specifico.
Per metterti alla prova puoi porre le seguenti domande:
Se la mia logica di business cambia (ad esempio si modifica qualcosa all'interno di un livello) quali componenti devono essere modificati? La risposta dovrebbe essere: solo il modello
Se voglio cambiare la mia app su java swing invece di javafx quali componenti devono essere modificati? La risposta dovrebbe essere: solo la vista.
Potrebbero esserci alcuni dettagli minori nel controller, a seconda di quanto si è andato lontano nel disaccoppiare il controllore dall'implementazione della vista o in modo simile dal controller del modello. Ma in generale, dovresti aver inserito tutte le logiche di business nel modello e tutte le cose relative alla presentazione (come colori, font, pulsanti, ...) nella Vista.
Solo per completezza. Se non ti dispiace condividere il tuo codice così com'è e vuoi che altre persone rivedano ciò che hai fatto bene e che cosa avrebbe potuto fare meglio, puoi sempre pubblicare (snippits di) il tuo codice su link