Informazioni di base su Model View-Controller

3

Se per esempio c'è un oggetto "SoccerTeam" con un TeamView e un TeamController, e quella squadra ha una lista di "Giocatori". Quindi esiste anche un oggetto "Player".

Questo oggetto ha bisogno anche di un "playerView" e un "PlayerController"? Se sì, "TeamController" dovrebbe usare "PlayerController"? E dovrebbe "PlayerView" aggiornare "TeamView"?

    
posta Ralph 26.11.2016 - 22:31
fonte

1 risposta

1

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.

    
risposta data 28.11.2016 - 06:04
fonte

Leggi altre domande sui tag