Model-View-Controller basics
Model-View-Controller ti insegna a separare le preoccupazioni (3 preoccupazioni nel suo caso). Non insegna come comunicare tra quelle tre preoccupazioni, cosa dovrebbe parlare di cosa, o anche cosa dovrebbe sapere su cosa. MVC è un modello di design molto vecchio creato prima che sapessimo come farlo correttamente.
Ci sono altre cose: pattern di osservatori, architettura di livello n, plugin, che insegnano lezioni preziose che potrebbero essere utili qui.
If there for example is an object "SoccerTeam" with a TeamView and a TeamController, and that team has a list of "Players". So there exists also an object "Player".
Does this object also need a "playerView" and a "PlayerController" ?
È allettante pensare che tutto sia una X e che devi solo scrivere XModel, XView e XController per ogni X, ma non è così semplice.
Una squadra è una raccolta di giocatori. Quindi il TeamView
è un osservatore di ogni giocatore. Almeno di ogni parte dei giocatori visibili per TeamView
.
Nulla finora impone che esista anche PlayerView
. Sarebbe bello se lo facesse perché TeamView
potrebbe semplicemente aggregare PlayerView
s piuttosto che osservare i giocatori stessi.
If yes, should "TeamController" use "PlayerController" ?
Poiché il Team aggrega Player, sarebbe ragionevole rendere disponibile un metodo di Player
per l'intero team. Il Pattern composito mostra come farlo. Comportamento come "prendere un ginocchio" è qualcosa che deve essere permesso solo all'allenatore. Quella logica non appartiene al modello (che riguarda lo stato) o alla vista (che riguarda la presentazione). E poiché l'allenatore non vorrà chiedere a ciascun giocatore individualmente, dobbiamo aggregarlo a livello di squadra.
teamView : Hey controller di squadra: l'utente dice, prendi un ginocchio. Torna da me ogni volta.
teamController : beh, quell'utente è l'allenatore, quindi gli è permesso farlo. Hey playerControllers, prendi un ginocchio.
playerController1 : hey playerModel1, prendi un ginocchio.
playerModel1 : Ginocchiato. Torna a te playercontroller1.
playercontroller1 : Ginocchiato. Torna a voi teamController.
teamController : Avanti.
playerController2 : hey playerModel2, prendi un ginocchio.
playerModel2 : Ho una gamba sballata quindi mi limiterò a mentire qui. Torna a playercontroller2.
playercontroller2 : hai qualche errore. Back to you teamController.
teamController : In ogni caso, Avanti.
...
teamController : l'emissione terminata prende un ginocchio. Torna alla tua vista.
teamView : Huh? Man l'utente ha fatto clic su 5 cose diverse mentre si stava sistemando. Solo chiamami quando gli aggiornamenti di stato del modello . Stiamo guardando cat video ora.
And should "PlayerView" update "TeamView" ?
Molto probabilmente no. Le opinioni dovrebbero essere assolutamente sottili e prive di qualsiasi logica e conoscenza possibile. Gli aggiornamenti dovrebbero provenire dal modello in quanto si tratta di modifiche di stato.