Stavo studiando il modello di progettazione Modello-Vista-Controller e ho compreso teoricamente il concetto alla base del modello, ma volevo dare un'occhiata a come si sarebbe effettivamente messo in pratica.
Wikipedia menzioni Wt - toolkit Web, CppCMS e alcune altre implementazioni standard che utilizzano il modello però non sono stato familiarità con questi, e speravo solo e sarà veramente grato se qualcuno può fornire alcuni esempi di codice (si spera C++) che implementa il modello e spiega la teoria del modello che viene messo in pratica.Modello Visualizza Controller Modello di progettazione Codice Esempio
risposta
Ecco un rapido esempio che ho fatto (non provate a compilarlo, fatemi sapere se c'è errore):
class Button; // Prewritten GUI element
class GraphGUI {
public:
GraphGUI() {
_button = new Button("Click Me");
_model = new GraphData();
_controller = new GraphController(_model, _button);
}
~GraphGUI() {
delete _button;
delete _model;
delete _controller;
}
drawGraph() {
// Use model's data to draw the graph somehow
}
...
private:
Button* _button;
GraphData* _model;
GraphController* _controller;
};
class GraphData {
public:
GraphData() {
_number = 10;
}
void increaseNumber() {
_number += 10;
}
const int getNumber() { return _number; }
private:
int _number;
};
class GraphController {
public:
GraphController(GraphData* model, Button* button) {
__model = model;
__button = button;
__button->setClickHandler(this, &onButtonClicked);
}
void onButtonClicked() {
__model->increaseNumber();
}
private:
// Don't handle memory
GraphData* __model;
Button* __button;
};
Ignorando l'attuazione di Button, in fondo questo programma utilizzerà GraphGUI per visualizzare un grafico che cambierà quando viene premuto un pulsante. Diciamo che è un grafico a barre e diventerà più alto.
Poiché il modello è indipendente dalla vista (il pulsante) e il controller gestisce la comunicazione tra i due, questo segue il modello MVC.
Quando si fa clic sul pulsante, il controller modifica il modello tramite la funzione onButtonClicked, che la classe Button sa chiamare quando viene fatto clic.
La bellezza di questo è dato dal fatto che il modello e la vista sono completamente indipendenti, l'implementazione di ognuno può cambiare drasticamente e non influenzerà l'altro, il controllore potrebbe semplicemente dover apportare alcune modifiche. Se il modello in questo caso ha calcolato alcuni risultati sulla base di alcuni dati del database, fare clic sul pulsante potrebbe far sì che ciò accada, ma l'implementazione del pulsante non dovrebbe cambiare.Oppure, invece di dire al controller quando si verifica un clic, forse può dire al controller quando il pulsante è collegato al mouse. Le stesse modifiche vengono applicate al modello, indipendentemente da ciò che ha attivato le modifiche.
Un semplice editor di testo può essere progettato in base a MVC. Pensa alla classe string
come al modello, in cui sono archiviati i dati. Potremmo avere una classe chiamata SimpleTextView
che visualizza il testo nello string
collegato ad esso, così com'è. Una classe chiamata KeyboardEventHandler
può fungere da controller. Il controller notificherà la visualizzazione dei nuovi eventi della tastiera. La vista a sua volta modifica il modello (come aggiungere o rimuovere testo). Le modifiche nel modello si riflettono su tutte le viste ad esso allegate. Ad esempio, potrebbe essere presente un'altra vista denominata HtmlView
allegata all'oggetto string
manipolato all'interno dello SimpleTextView
. Se l'utente inserisce tag HTML validi nel SimpleTextView
, lo HtmlView
visualizzerà l'output formattato - in tempo reale.
Ci sono un paio di esempi MVC completi, oltre a discussioni, in c 2 di un'introduzione alla programmazione in Python 3.x che ho scritto (non ho completato ch 3 ecc., Quel progetto è stato in ghiaccio per qualche tempo - La comunità Python amava davvero lo sciame arrabbiato di api quando ho scoperto che avevo scritto che Python forse non era adatto per uno sviluppo su larga scala, quindi è diventato difficile ottenere un feedback ragionevole). È disponibile in formato PDF dal Google Docs. Non so quanto bene si associ alle comuni implementazioni MVC, ero principalmente interessato a far passare l'idea generale. . :-)
Acclamazioni & hth,
PS: C'è una bella tabella di contenuti nel file PDF ma Google Docs non vederlo. Avresti bisogno di dl e usare Foxit o Acrobat o qualche altro visualizzatore di PDF. Penso che ci sia un TOC visibile a parte per Google Docs, tuttavia, non ho controllato e non ricordo se aggiornato.
PPS: Dimenticato di menzionare, l'esempio di elaborazione delle immagini MVC vicino alla fine ha una bella foto di Lena Söderberg! :)
Codice è l'approccio migliore per capire e imparare Model View Controller:
Ecco un semplice esempio JS (da Wiki)
/** Model, View, Controller */
var M = {}, V = {}, C = {};
/** Model stores data */
M.data = "hello world";
/** View controls what to present */
V.render = (M) => { alert(M.data); }
/** Controller bridges View and Model */
C.handleOnload =() => { V.render(M); }
/** Controller on Windows OnLoad event */
window.onload = C.handleOnload;
Ecco un post dettagliato in C/C++ Model-View-Controller Explained in C++
- 1. Ottieni nome controller in Visualizza modello T4
- 2. Progettazione modello di errore
- 3. Modello di progettazione DAO
- 4. Modello di progettazione lavoratore
- 5. visualizza modello codice tag - asp.net mvc - regd
- 6. Frustrazione del modello di progettazione
- 7. Dilemma di selezione del modello di progettazione
- 8. Modello componente angolare2 vs Visualizza modello
- 9. Modello di progettazione MVC. Come si adatta View?
- 10. ExtJS: Visualizza modello in Ext.grid.property.Grid
- 11. ng-controller esterno modello
- 12. modello backbone salva esempio
- 13. modello partecipante in modelli di progettazione?
- 14. Modello di progettazione MVVM per Android
- 15. Codice modello modello non funziona
- 16. Un modello di progettazione per i costruttori
- 17. Bestpractice - Mixing Visualizza modello con modello di dominio
- 18. controller vs. Modello - Necessità spiegazione
- 19. Middleware modello di progettazione in Node.js: Collegare
- 20. Modello di progettazione per la convalida dell'input?
- 21. Quale modello di progettazione utilizzare (ho bisogno di qualcosa come il modello di mediatore)?
- 22. Grasso Modello Skinny Controller CodeIgniter
- 23. Risorse del modello di progettazione CFML?
- 24. Utilizzare correttamente il modello di progettazione singleton
- 25. Associazione dati come modello di progettazione
- 26. Equivalente funzionale del modello di progettazione stato
- 27. I video del modello di progettazione software?
- 28. modello di progettazione builder in C
- 29. Modello modulo JavaScript con esempio
- 30. DetailView modello che non visualizza i dati del modello
In MVC, la vista di solito non è a conoscenza del controller. In genere, il Controller dovrebbe conoscere il modello e la vista e fornire la vista con l'istanza appropriata del modello. Il modello, come hai detto, non è a conoscenza della vista. –
@ Matt, robdev: il modello non è a conoscenza della vista ma Model può visualizzare la visualizzazione dell'aggiornamento nei suoi dati .. (tipico utilizzo del pattern Observor) –
@Matt, beh, vedo il tuo punto, ma in questo esempio la vista non viene visualizzata t sapere esplicitamente sul controller. Viene appena dato un puntatore a oggetti e funzioni e dice "chiunque tu sia, sono stato appena cliccato! Chiama la tua funzione" e viene chiamato onButtonClicked(). – robev