Czy MVC dotyczy tylko Internetu?

14

Jest to niemal natychmiastowe, ilekroć rozmawiam z programistami na temat Model View Controller ( MVC ), mówią, że wysyłasz zapytanie do adresu URL, na którym serwer tworzy jednostkę (MODEL) i zapewnia wizualną reprezentację tego modelu.

  • Czy to oznacza, że ​​MVC jest przeznaczony tylko do Internetu, czy też spotkałem ludzi, którzy są tylko programistami, którzy używają MVC do pisania aplikacji internetowych?

  • Czy są zastosowania MVC w aplikacjach w stylu komputerowym?

  • Po pierwsze jestem nowy w paradygmacie i chciałbym wiedzieć o jakimkolwiek super-zestawie do MVC

Deeptechtons
źródło
1
sprawdziłeś wiki Programmers.SE lub Stack Overflow dla 'mvc'?
komary
3
@gnat tak zrobiłem
Deeptechtons
6
więc prawdopodobnie już znasz odpowiedź na swoje pytanie, prawda?
komara
4
@gnat poważnie NIE, jestem zupełnie nowy w MVC (jak wspomniano) i nigdy nie użyłem ani nie słyszałem (niektóre uszy mam) o zastosowaniu MVC do aplikacji Windows lub o aplikacji z logo MVC na stronie pobierania. Przepraszam, jeśli pytanie było głupie, ale dla mnie robi puzzle
Deeptechtons
Istnieje wiele dobrych zasobów do nauki historii MVC, ale często widzę to nieporozumienie, więc napisałem fajne streszczenie na moim blogu blog.kutulu.org/2012/01/mvc-mvp-mvvm-mvpvm-lmnop-wtf .html
KutuluMike

Odpowiedzi:

22

MVC jest wzorem. Wzorce obowiązują we wszystkich programach. MVC po prostu działa bardzo dobrze w kontekście sieciowym.

Jak wskazuje gnat, wystarczy spojrzeć na tag mvc, a zobaczysz wiele przykładów jego implementacji.

Tom Squires
źródło
5
To jest klucz. MVC działa naprawdę dobrze w aplikacjach internetowych i rzeczywiście jest dużą częścią powodu, dla którego nowoczesne frameworki oparte na MVC (takie jak Rails, Django i ASP.NET MVC) są tak popularne. Działa również w innych kontekstach (takich jak aplikacje komputerowe), ale trudniej jest zachować czystą separację widoku i kontrolera, więc warianty, które usuwają separację kontrolera widoku, takie jak Model-delegator (używany przez Swing) lub zmieniają miejsce podziału jak Model-View-ViewModel (używany głównie przez aplikacje WPF .Net) są bardziej powszechne w aplikacjach komputerowych.
Kevin Cathcart
Jeśli spojrzysz na oryginalny opis Smalltalk tego, co robi kontroler - przetłumacz dane wejściowe użytkownika na komunikaty dla modelu - sam system Windows jest w zasadzie jednym dużym kontrolerem; dlatego MVC jako wzorzec nie łączy się zbyt dobrze z aplikacjami Windows UI. Użyto go znacznie więcej w ramach interfejsu użytkownika dla systemów innych niż Windows.
KutuluMike,
@MichaelEdenfield Nie bardzo; możesz robić MVC i WinFormy razem, chociaż MVP jest tam bardziej popularny, ale MVP i tak jest odmianą MVC.
Andy,
45

Biorąc pod uwagę, że MVC pochodzi z 1977 roku, a sieć została wynaleziona dopiero w 1991 roku, powinno być całkiem oczywiste, że MVC jest nie tylko dla sieci.

Jörg W Mittag
źródło
30
To dobry początek odpowiedzi, ale ma gorzki smak w ustach.
Nicolas C.
2
Prawidłowe i snarky. Świetna sprawa!
Tom Hawtin - tackline
1
„W 1982 r. Pakiet protokołów internetowych (TCP / IP) został znormalizowany i wprowadzono koncepcję ogólnoświatowej sieci w pełni połączonych sieci TCP / IP o nazwie Internet”. wiki . Jeśli masz na myśli netscape, to dobrze ... ale wcześniej istniała „sieć”.
jmq
4
@jmquigley „Internet” i „Internet” to dwie bardzo różne rzeczy.
Eric King
1
@jmq 1977 jest STILL jeszcze przed 1982 rokiem i jak ktoś inny wskazał Web! = Internet. Sieć naprawdę NIE istniała przed 1991 r.
Andy
9

Nie, programowanie dla OS X i iOS używa wzorca Model View Controller.

Holli
źródło
2
Wreszcie odpowiedź na pierwszy i drugi punkt bez komentarza.
JeffO
8

Zadaj pytanie w środowisku Microsoft, a wiele osób uzna, że ​​masz na myśli Asp.Net MVC, który jest implementacją MVC przeznaczoną specjalnie dla Internetu.

Niestety wiele osób nie zdaje sobie sprawy z tego, że jest to implementacja wzorca MVC i uważa, że ​​są to terminy wymienne, co prowadzi do założenia „tylko sieć”.

ozz
źródło
3
+1 to jest problem z nazwaniem platformy po metodologii. Kiedy ludzie zostają najpierw przedstawieni na platformie, nie widzą tego rozróżnienia.
MattDavey
@Ozz to wyjaśniało, dlaczego inni programiści zawsze mówią o sieci, gdy MVC jest tematem
Deeptechtons
1
Dziękuję, przestańcie malować programistów Microsoft jako głupców.
Andy,
@Andy - to nie było bashowanie deweloperów MS, sam jestem programistą Asp.Net MVC i trzymam się oryginalnej odpowiedzi. Nie powiedziałem „wszyscy” ludzie ani „wszyscy” deweloperzy .net, tylko obserwacja założenia lub błędu, który widziałem wielu ludzi. Dzięki.
ozz
2

Przynajmniej o ile wiem, pierwsze wdrożenie MVC miało miejsce w Smalltalk. Na pewno był obecny w Smalltalk-80. Chociaż nie mam żadnej dokumentacji, która mogłaby to udowodnić, wierzę, że (lub coś podobnego zresztą) było w Smalltalk od kilku lat.

Większość frameworków graficznych interfejsu użytkownika zawiera przynajmniej niektóre warianty MVC. Nie jestem jednak pewien, co dokładnie oznaczałoby „nadzbiór” w tym przypadku. Trochę trudno powiedzieć, czy dany wariant jest nadzbiorem, podzbiorem lub równorzędną częścią MVC, ale zwykle rozważam większość z nich.

W każdym razie wiele (większość?) Z nich zostało wykorzystanych do tworzenia desktopów, a nie do tworzenia stron internetowych. Dzięki niektórym starym patentom AT&T większość systemów okienkowych wymaga, aby programy mogły ponownie generować widoki na żądanie. To (prawie) wymusza przynajmniej pewien stopień separacji między kodem, który utrzymuje aktualny stan (model), a kodem, który wyświetla ten stan (widok). To wciąż pozostawia wiele miejsca na zmiany w 1) stopniu, w jakim funkcjonalność kontrolera jest izolowana, oraz 2) dokładnych szczegółach, gdzie narysować linie między każdym z głównych elementów.

Jerry Coffin
źródło
1

Nie, dotyczy to nawet samodzielnych aplikacji. Przykład Java Swing następuje po MVC.

Seshagiri TV
źródło
1
Dlaczego głosować niech pozwala żyć!
Deeptechtons
1

W tym obszarze istnieje wiele różnych wzorów projektowych.

  • Model View Presenter (mvp)
  • Model View View Presenter (mvvp)
  • Kontroler widoku modelu
  • Model 2

i tak dalej. Przez lata były one ze sobą splecione, połączone, zmienione i zastosowane w wielu różnych kontekstach. Ważną kwestią jest to, że wzorzec projektowy MVC z 1977 r. Bardzo się zmienił i nie jest już wzorcem używanym przez frameworki sieciowe na serwerach. Jako przykład w oryginalnej implementacji smalltalk, Model obserwowałby widok zmian, co już nie ma miejsca, ponieważ strona serwerowa po prostu nie może obserwować elementów HTML w przeglądarce użytkownika. Zamiast tego, jeśli widok się zmieni, widok wyśle ​​żądanie do kontrolera, który następnie zaktualizuje widok. Ponownie nie zastosowano się do oryginalnej implementacji MVC, ponieważ aktualizacja modelu oznaczałaby aktualizację wszystkich widoków zależnych od modelu.

Nowoczesne frameworki internetowe oparte są na prostej architekturze trójwarstwowej znanej również jako architektura Model 2.

Istnieją oczywiście przykłady prawdziwych architektur MVC w Internecie, ale często są one tylko po stronie klienta, podłączone do serwera zgodnego z architekturą Modelu 2, ponieważ widoki są xml i json i nie są obserwowane dla zmian. Przykładami architektury czystego mvc po stronie klienta są Sencha Touch i Sproutcore.

Jeśli masz MVC w przeglądarce, mvc jak na serwerze i mvc jak jako warstwę danych, masz hierarchiczną implementację mvc.

Uwaga. Mówiłem tylko o frameworkach internetowych, innych implementacjach MVC, takich jak Java Swing i Flex, ale istnieją także inne różnice implementacyjne.

Kjaer
źródło
Z pewnością nie ma sensu, dlaczego ludzie głosują na innych, jeśli coś jest nie tak, powiedz im i daj szansę skorygowania ich opinii. Jeśli nie mają wiedzy na ten temat, dobry nauczyciel skieruje ich do właściwego źródła, nie pobije go, dopóki się go nie nauczy!
Deeptechtons
pytanie zakłada, że ​​mvc i sieć działają dobrze razem i apeluje o mvc niebędące webem, więc jeśli podajesz tylko przykłady mvc w kontekście sieci: -1
hildred
1

Jedną rzeczą, którą musisz wiedzieć, jest to, że istnieje tyle smaków MVC, ile jest ram, które twierdzą, że implementują MVC.

Większość zgadza się co do faktu, że Model posiada pewien stan, a Widok go renderuje. Ale kontroler ma bardzo różne role.

W Smalltalk, gdzie został po raz pierwszy opisany, Model jest rdzeniem aplikacji, danych i metod biznesowych. Widok jest graficzną reprezentacją stanu aplikacji (inaczej Model), a Kontroler zarządza danymi wejściowymi użytkownika, zdarzeniami myszy i klawiatury. Na przykład kontroler kieruje zdarzenia klawiatury do elementu widoku, który ma fokus.

Na stronach .jsp Model to głównie dane, widok renderuje ten model do HTML, a kontroler kieruje model do odpowiedniego widoku, aby go wyrenderować.

Tak więc, aby odpowiedzieć na twoje pytanie, podczas gdy MVC jest używany zarówno w samodzielnych aplikacjach (Java, .Net, Flex), jak i w Internecie (strony jsp), jest to zupełnie inna sprawa. Oznacza to, że MVC, którego znasz, nie jest używany w samodzielnych aplikacjach.

Florian F.
źródło