Moim zdaniem są dwa rodzaje MVC - czyste i nieczyste (z powodu braku lepszego słowa :)
Pure MVC jest tym, co zostało wprowadzone do krótkiej rozmowy:
To było przeznaczone do osobistych aplikacji komputerowych / stacjonarnych. Jak widać, model informuje widoki o wszelkich dokonanych w nim aktualizacjach / zmianach. Nie jest tak w przypadku (nieczystego) MVC.
Innym (nieczystym) MVC reklamowanym w aplikacjach internetowych jest bardziej wzór PAC ( Presentation-abstraction-control ) zamiast klasycznego MVC powyżej. To bardziej organizacja kodu i rozdzielenie problemów:
- Model : Abstrakcja dla przechowywanych danych
- Kontrola : zwykle tak zwana warstwa logiki biznesowej, a także część aplikacji odpowiedzialna za kierowanie żądań HTTP do odpowiedniej logiki biznesowej (inaczej kontrolera)
- Widok : głównie przeglądaj szablony, które formatują dane z modelu i zwracają je klientowi. Model NIGDY nie wysyła aktualizacji do widoku, a widok nie „subskrybuje” aktualizacji z modelu. To byłby koszmar. Dlatego bardziej przypomina PAC niż prawdziwe MVC.
Oto, jak zazwyczaj zbudowana jest aplikacja internetowa:
- Front-end : MVC na kliencie używającym frameworków jak Backbone.js itp. Jest to w istocie „prawdziwa” forma MVC.
- Back-end : Znowu masz (nieczyste) MVC / PAC do organizacji kodu i rozdzielania problemów
- Globalna aplikacja internetowa (dla aplikacji internetowej jako całości): Jeśli masz zaplecze RESTful, które zwraca tylko dane JSON, wówczas cały backend może być postrzegany jako model aplikacji klienckiej frontonu, w której rezydują widok i kontroler.
Jakie są wady MVC ? Ten wzór przetrwał próbę czasu, więc nie ma wielu, które mają tak duże znaczenie, poza tym, że jest trochę „skomplikowane”. Widzisz, MVC jest wzorem złożonym - implementuje wzór strategii / obserwatora i wszystkie są dobrze ułożone, aby utworzyć wzorzec wysokiego poziomu.
Czy powinieneś używać go wszędzie? Może nie. Niezwykle złożone aplikacje internetowe mogą być podzielone na wiele warstw! Użycie tylko warstw Widok / Logika biznesowa / Dane może nie być możliwe. Nadrzędna struktura / organizacja może nadal być podobna do MVC, ale tylko na poziomie makroskopowym.
Oto przykład, w którym sam MVC może być złym wyborem : spróbuj zaprojektować system kontroli ruchu lotniczego lub aplikację do obsługi pożyczek / kredytów hipotecznych dla dużego banku - sam MVC byłby złym wyborem. Nieuchronnie będziesz mieć szyny zdarzeń / kolejki komunikatów wraz z wielowarstwową architekturą z MVC w poszczególnych warstwach i być może nadrzędnym projektem MVC / PAC, aby lepiej zorganizować bazę kodu.