Nella mia mente le differenze per tutte le varianti di modelli Model View Controller (MVP, Passive View, Supervising Controller, Vista Modello, etc.) sono abbastanza sottili. Si tratta di chi elabora i dati e prende i dati da chi, davvero. Stanno tutti cercando di risolvere lo stesso problema, separando qualcosa da da un'altra cosa, e le soluzioni fanno tutto ciò in modo simile.
E 'quasi palesemente evidente che i concetti sono simili in esecuzione quando si pensa a questo proposito in termini visivi:
Simplistic MVC:
+-------+ manipulates data
| Model |<---------------------+
+-------+ |
| |
| gets data |
v |
+------------+ serves data +------+
| Controller |------------->| View |
+------------+ +------+
Simplistic MVP:
+-------+
| Model |
+-------+
|^
| | get/manipulates data
v |
+-----------+ serve data +------+
| Presenter |-------------->| View |
| |<--------------| |
+-----------+ tell changes +------+
Sono simili in quanto gerarchia di classe può sembrare lo stesso in entrambi. La differenza tuttavia sono i diversi modi di visualizzare e manipolare i dati. Quando stai distribuendo il tuo MVC, allora sei il responsabile di come dovrebbe essere.
Non ha molta importanza poiché si basano tutti su un principio di separazione di parti di codice in entità logiche self-service e riduzione della duplicazione del codice. Finché si mantiene il code coupling low dovrebbe funzionare bene alla fine. Importa solo se vuoi essere dogmaticamente conseguente all'architettura della tua applicazione.
Essere pragmatici al riguardo e fare ciò che più si addice ai tuoi bisogni, visto che finirai comunque con un mix. Dovrebbe essere "abbastanza" facile passare da una variazione all'altra a seconda delle esigenze della vista. Seguire i principi SOLID e si dovrebbe fare bene. (Vedi anche this about SOLID).
Vorrei suggerire di esaminare se esistono quadri MVC o MVP per vedere come è fatto.
+ 1..always apprezzare diagrammi ASCII nelle risposte. –
spoike: la tua risposta è abbastanza esplicativa .. Grazie. – Sumeet