Attualmente sto sviluppando un'applicazione SFML che memorizza un determinato valore nel mio modello, che viene visualizzato dalla vista.
Poiché SFML opera su un tipo di ciclo di rendering, che aggiorna costantemente l'interfaccia, ho bisogno di recuperare questo valore che deve essere visualizzato dal modello in cui è memorizzato in ogni iterazione per tenerlo aggiornato. Non è possibile passare efficacemente questo valore dal controller, a causa di quanto segue:
Il mio loop SFML ha il seguente aspetto:
while (renderWindow->isOpen())
{
sf::Event event;
while (renderWindow->pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
renderWindow->close();
break;
case sf::Event::MouseButtonPressed:
HandleLeftClick(event);
break;
case sf::Event::MouseButtonReleased:
HandleLeftClickRelease(event);
break;
}
}
m_mainWindowView->DrawWindow();
}
Come puoi vedere, eseguo la gestione degli eventi nel mio controller, ma passo l'intera interfaccia che si sta ridisegnando alla mia vista. Potrei tecnicamente passare il valore che voglio mostrare con questa chiamata, ma se ho bisogno di più valori dal mio controller, questo potrebbe portare a molti parametri in seguito.
Per quanto ne so, la vista non dovrebbe avere un riferimento al modello. Pertanto, la mia soluzione attuale ha il seguente aspetto:
Quando la vista ridisegna la finestra, richiama una funzione nel controller per recuperare il valore da visualizzare dal modello. Il controller reindirizza questa richiesta al modello, quindi restituisce i dati dal modello alla vista sul controller.
Ritengo che questo approccio non sia corretto, ma non riesco a capire quali altre opzioni ho con il pattern MVC. Non sono nemmeno sicuro se il ciclo di eventi SFML permetta un approccio MVC puro o se non riesco a smuoverlo adattandolo un po '.
Potrei teoricamente memorizzare un puntatore sul valore desiderato nella vista, ma sarebbe come creare una dipendenza dalla vista al modello.
Qualche consiglio su come farlo in modo appropriato?