Quale fine dovrebbe iniziare per primo? (MVC)

0

Sto sviluppando una piccola applicazione e sto facendo del mio meglio per renderla il più professionale possibile per quanto riguarda il modello di design, ecc.

Si tratta di un'app JavaFX e la mia app funziona bene, ma sono a disagio sul fatto che sto istanziando il back-end nel front-end. Ho fatto del mio meglio per seguire il pattern MVC e penso di esserci riuscito finora, ma non riesco a vedere in alcun modo.
Fondamentalmente, la mia applicazione ha livelli di difficoltà, e in base al livello di difficoltà scelto dall'utente (che è necessario per creare il back-end) viene creato un gioco con quel livello di difficoltà. E non riesco a pensare ad altro modo per avviare il back-end senza prima conoscere il livello di difficoltà, quindi è istanziato nel front-end.
Tuttavia, oltre al fatto che il front-end non ha logica. Disegna e invia solo input dell'utente al back-end, ovviamente il back-end ha la logica e dice al front-end dove disegnare le modifiche.

È considerato ok? In caso negativo, come dovrebbe essere lanciato ciascun lato del tubo?

    
posta Pants 19.04.2017 - 18:50
fonte

2 risposte

1

Is this considered ok?

Non vedo alcun problema con il tuo approccio.

If not how should each side of the pipe be launched?

Se il lato modello della tua applicazione dovesse essere un server con la possibilità per più visualizzatori di connettersi ad esso, allora dovrai preoccuparti di come avviarlo indipendentemente dal visualizzatore / controller e collegarti ad esso.

Dalla tua descrizione, non sembra che il lato modello sarà un server indipendente. Quindi, ha più senso che il tuo visualizzatore sia avviato per primo, che poi avvia il modello con l'input necessario.

    
risposta data 21.04.2017 - 17:56
fonte
0

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

    
risposta data 21.04.2017 - 17:08
fonte

Leggi altre domande sui tag