Jako poważny programista, jak odpowiesz na pytanie Co to jest MVC?
Moim zdaniem, MVC jest dość mglistym tematem - dlatego też, jeśli twoja publiczność jest uczniem, możesz opisać go w kategoriach ogólnych, które raczej nie będą kontrowersyjne.
Jeśli jednak rozmawiasz ze znającą się na rzeczy publicznością, a zwłaszcza z ankieterem, trudno mi się zastanowić nad wyborem kierunku, który nie ryzykuje reakcji „no cóż, to nie w porządku! ...”. Wszyscy mamy różne doświadczenia w świecie rzeczywistym i nigdy nie spotkałem się dwukrotnie z tym samym wzorcem implementacji MVC.
W szczególności wydaje się, że istnieją spory dotyczące ścisłości, definicji komponentu, oddzielenia części (jaki kawałek pasuje gdzie) itp.
Jak mam wyjaśnić MVC w sposób poprawny, zwięzły i niekontrowersyjny?
źródło
Odpowiedzi:
MVC to architektura oprogramowania - struktura systemu - która oddziela logikę domeny / aplikacji / biznesu (cokolwiek wolisz) od reszty interfejsu użytkownika. Odbywa się to poprzez podzielenie aplikacji na trzy części: model, widok i kontroler.
Model zarządza podstawowymi zachowaniami i danymi aplikacji. Może odpowiadać na prośby o informacje, odpowiadać na instrukcje zmiany stanu informacji, a nawet powiadamiać obserwatorów w systemach sterowanych zdarzeniami o zmianie informacji. Może to być baza danych lub dowolna liczba struktur danych lub systemów pamięci. Krótko mówiąc, są to dane i zarządzanie danymi aplikacji.
Widok skutecznie zapewnia element interfejsu użytkownika aplikacji. Wyrenderuje dane z modelu w formie odpowiedniej dla interfejsu użytkownika.
Kontroler odbiera dane wejściowe od użytkownika i wywołuje modele obiektów oraz widok w celu wykonania odpowiednich działań.
Podsumowując, te trzy komponenty współpracują ze sobą, tworząc trzy podstawowe komponenty MVC.
źródło
Analogia
Wyjaśniłem MVC mojemu tacie w ten sposób:
MVC (model, widok, kontroler) to wzorzec organizowania kodu w aplikacji w celu poprawy możliwości konserwacji.
Wyobraź sobie fotografa z aparatem w studio. Klient prosi go o zrobienie zdjęcia pudełka.
Pudełko to model , fotograf to kontroler, a aparat to widok .
Ponieważ pudełko nie zna aparatu ani fotografa, jest całkowicie niezależne. Ta separacja pozwala fotografowi na obejście pudełka i skierowanie aparatu pod dowolnym kątem, aby uzyskać pożądane ujęcie / widok.
Architektury inne niż MVC są ze sobą ściśle zintegrowane. Gdyby więc pudełko, kontroler i kamera były jednym i tym samym obiektem, musielibyśmy rozdzielić, a następnie przebudować zarówno pudełko, jak i kamerę za każdym razem, gdy chcieliśmy uzyskać nowy widok. Robienie zdjęcia zawsze byłoby jak próba zrobienia selfie - i to nie zawsze jest bardzo łatwe.
Szczegółowe wyjaśnienie
Dopiero po przeczytaniu następującego pytania / odpowiedzi maillisty poczułem, że rozumiem MVC. Cytat: https://mail.python.org/pipermail/python-list/2006-J stycznia/ 394968.html
źródło
MVC to w większości modne słowo.
Kiedyś uważano go za wzór, ale jego pierwotna definicja z 1979 r. Została stępiona, przekazana, źle zinterpretowana, wyjęta z kontekstu oryginalnego. Zostało źle zdefiniowane do tego stopnia, że zaczyna przypominać religię, i chociaż z pewnością pomaga to kultystom ładunku broniącym go, jego nazwa nie kojarzy się już z solidnym zbiorem wytycznych . Jako taki nie można już tak naprawdę traktować go za wzór.
MVC nigdy nie miało opisywać aplikacji internetowych.
Ani nowoczesne systemy operacyjne, ani języki.
(niektórzy z nich faktycznie zwolnili definicję z 1979 r.)
Zostało to zrobione. I to nie wyszło.
Mamy teraz do czynienia z nieprzyzwoitą hybrydą web-mvc, która ze swoim okropnym hasłem, złą definicją i posiadaniem częściowo niepiśmiennych programistów jako docelowej grupy demograficznej sprawia, że ogólnie bardzo źle reklamuje się wzorce oprogramowania.
Tak więc MVC stało się oddzieleniem destylowanych obaw dla osób, które tak naprawdę nie chcą za dużo o tym myśleć.
Witryny internetowe / aplikacje internetowe w latach 90. tak naprawdę nie używały rozdzielania problemów.
To były okropne bzdury wymieszanego kodu spaghetti.
Zmiany interfejsu użytkownika, przeprojektowania i zmiany układu danych były niewiarygodnie trudne, drogie, długie, przygnębiające i niefortunne.
Technologie sieciowe, takie jak ASP, JSP i PHP, zbyt łatwo łączą problemy dotyczące widoku z danymi i obawami dotyczącymi aplikacji. Nowicjusze w tej branży zwykle emitują nierozerwalne błotniki kodu, jak w dawnych czasach.
W ten sposób rosnąca liczba osób zaczęła powtarzać „używaj MVC” w niekończących się pętlach na forach wsparcia. Liczba osób wzrosła do tego stopnia, że obejmowała menedżerów i marketerów (do niektórych termin ten był już znany, od czasów programowania GUI, w których wzorzec miał sens), i stało się ono potworem modnego hasła, z którym musimy się teraz zmierzyć .
W obecnej formie jest to zdrowy rozsądek , a nie metodologia .
To punkt wyjścia , a nie rozwiązanie .
To tak, jakby kazać ludziom oddychać powietrzem lub robić brzuszki , a nie lekarstwo na raka .
źródło
It's a fancy word for pre-existing concepts that didn't really need one.
A jaki wzór / architektura nie pasuje do tego opisu?The data model is handled one way, the view in another, the rest is just named "controller"
+1Najlepszym sposobem na zdefiniowanie tego jest przejście do oryginalnych pism Trygve'a Reenskauga , który go wynalazł: http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html
W szczególności ten dokument jest ogólnie uważany za tekst definicyjny: http://heim.ifi.uio.no/~trygver/1979/mvc-2/1979-12-MVC.pdf
źródło
MVC to wzorzec projektowy używany do izolowania logiki biznesowej od prezentacji.
Różni się od wielu innych wzorców projektowych tym, że zwykle nie jest zaimplementowany zwięźle, ale jest podstawą frameworka.
Podczas gdy aplikacja implementująca wzorzec strategii jest tylko niewielkim szczegółem na ten temat, stwierdzenie, że aplikacja internetowa korzysta ze wzorca projektowego MVC, bardzo definiuje jego architekturę .
źródło
MVC to projekt oprogramowania, który oddziela następujące elementy systemu lub podsystemu:
źródło
Powiedziałbym, że MVC to koncepcja lub rodzina podobnych wzorów.
Myślę, że ten artykuł warto przeczytać. Architektury GUI autorstwa Martina Fowlera
źródło
Najpierw musisz ustalić, kto jest pytającym i jakiego rodzaju odpowiedzi szuka. Odpowiadasz na to pytanie innym pytaniem, na przykład „W jakim sensie?”
Możesz zapytać, czy odnoszą się one ogólnie do MVC, konkretnej implementacji MVC (tj. Asp.net MVC, spring MVC, smalltalk MVC itp.), Co to jest technicznie, co to jest filozoficzne (tak, ma także filozofia) itp.
Jeśli jest to pytanie w teście i nie możesz poprosić pytającego o wyjaśnienie, będziesz musiał zgadywać na podstawie kontekstu.
Dobra, prosta odpowiedź to:
Możesz też powiedzieć:
Ale ostatecznie zostaniesz osądzony na podstawie tego, czy dasz odpowiedź, której oczekują. Jedynym rozwiązaniem tego problemu jest ustalenie, jakiej odpowiedzi oczekują.
źródło
Oto, co bym o tym powiedział. Chciałbym wyjaśnić to w kategoriach aplikacji mobilnych, ponieważ to jest to, co znam najbardziej i ponieważ nie sądzę, że w pełni to zrozumiałem, zanim zacząłem tworzyć aplikacje mobilne.
Weźmy na przykład Androida.
Warstwa prezentacji, tj. interfejs użytkownika może (powinien, najczęściej jest) być całkowicie określony w formacie xml. Dla uproszczenia załóżmy, że jeden plik xml opisuje jeden ekran w aplikacji. Plik XML określa elementy sterujące, układ elementów sterujących, położenie, kolory, rozmiar, etykiety ciągów ... wszystko, co dotyczy prezentacji. Jednak nie wie nic o tym, kiedy zostanie wywołany, kiedy zostanie umieszczony na ekranie. Czy będzie to samodzielny układ czy część większego układu? Masz to: Twój idealny WIDOK .
Teraz widok w pewnym momencie musi zostać umieszczony na ekranie, więc jak to zrobić? Twój KONTROLER w systemie Android o nazwie Aktywność. Jak sama nazwa wskazuje, aktywność wykonuje pewną aktywność. Nawet jeśli jego jedynym celem jest wyświetlenie widoku zdefiniowanego w kroku 1, wykona on pewną akcję. Tak więc aktywność pobiera widok i wyświetla go na ekranie. Ponieważ widok nie wie nic o aktywności, podobnie aktywność nie wie nic o rzeczywistej prezentacji. My (programiści) mogliśmy wielokrotnie zmieniać układ widoku, nie zmieniając nawet jednego wiersza kodu w naszej działalności.
Teraz nie ma większego sensu prezentowanie ładnego, błyszczącego, dobrze zdefiniowanego układu xml bez robienia czegoś. Powiedzmy, że chcemy przechowywać dane wprowadzone przez użytkownika. Aktywność musi poradzić sobie z tym procesem, od zabrania danych od użytkownika do przekazania go komuś innemu, aby go obsłużył (przetwarzaj, przechowuj, usuwaj). Komu to przejdzie? Cóż, do MODELU . Lubię myśleć o modelu jako czystym. klasa java, która nie wie nic o kontekście aplikacji, w której żyje. (W praktyce prawie nigdy tak nie będzie).
Powiedzmy, że mam klasę Osoba, która ma trzy właściwości: imię, adres, wiek. Mój układ XML ma 3 pola do wprowadzenia przez użytkownika: imię i nazwisko, adres, wiek. Moja aktywność pobiera trzy wartości z danych wejściowych użytkownika, tworzy nowy obiekt Person i wywołuje na nim metodę, która wie, jak obsługiwać logikę specyficzną dla Person. Masz to. Model-View-Controller.
źródło
Zawsze zaczynam od powiedzenia im, że wzór nie jest niczym nowym i istnieje od wielu lat ... w tym momencie dają mi ciekawy wygląd i BAM !, są uzależnieni:
I wtedy prawie mówiłbym o różnych punktach, takich jak poprzednie odpowiedzi, ale myślę, że ważne jest, aby być kontekstowym, jak powiedział JB King, ASP.NET MVC itp.
źródło