W moim umyśle różnice dla wszystkich odmian wzorów Model-View-Controller (MVP, Passive View, Supervising Controller, Widok Model, etc.) są dość subtelne. Chodzi o to, kto przetwarza dane i bierze dane od kogo, naprawdę. Wszyscy próbują rozwiązać ten sam problem, oddzielając coś od kolejną rzecz, a rozwiązania robią to wszystko w podobny sposób.
Jest niemal rażąco oczywiste, że pojęcia są podobne w realizacji, kiedy myślisz o nim w kategoriach wizualnych:
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 +------+
Są podobne w tej klasie hierarchii może wyglądać tak samo w obu. Różnica polega jednak na różnych sposobach wyświetlania i manipulowania danymi. Kiedy wdrażasz swój własny MVC, odpowiadasz za to, jak powinien wyglądać.
To naprawdę nie ma większego znaczenia, ponieważ wszystkie opierają się na zasadzie oddzielania fragmentów kodu na jednostkach logicznych obsługujących samoobsługę i ograniczaniu powielania kodu. Tak długo, jak utrzymujesz numer code coupling low, powinien on wyglądać ładnie na końcu. Ma to znaczenie tylko wtedy, gdy chcesz być dogmatycznie konsekwentny w swojej architekturze aplikacji.
Bądźcie pragmatyczni i róbcie to, co najbardziej odpowiada waszym potrzebom, ponieważ i tak macie mieszankę. Powinno być "dość" łatwe przełączanie pomiędzy wersjami w zależności od tego, czego potrzebuje widok. Postępuj zgodnie z zasadami SOLID i powinieneś zrobić dobrze. (Patrz także this about SOLID).
Proponuję sprawdzić, czy istnieją struktury MVC lub MVP, aby zobaczyć, jak to zrobić.
+ 1..always doceniając diagramy ASCII w odpowiedzi. –
spoike: twoja odpowiedź jest dość wyjaśniająca .. Dzięki. – Sumeet