Dlaczego miałbyś używać MVC zamiast formularzy internetowych?

11

Ostatnio architekt opisał naszą firmę jako oferującą rozwiązanie Rolls-Royce'a (MVC), gdy wszystko, czego potrzebował, to Toyota (Web Forms).

Jestem ciekawy, co sądzisz o formularzach internetowych a MVC jako wyborze architektonicznym.

Tajemnica
źródło
11
Myślę, że architekt nie bardzo dobrze rozumie ASP.NET MVC.
Adam Crossland,
3
@Chris Webforms nie jest podzbiorem MVC. Oba działają całkowicie niezależnie od siebie. Również formularze internetowe są stare i prawdopodobnie nie są utrzymywane dłużej. Także dla front-endowych twórców stron internetowych / interfejsów użytkownika jest to antychryst.
Erik Reppen

Odpowiedzi:

20

Analogia Rolls-Royce / Toyota jest strasznie błędna i wprowadza w błąd. Jeden (ASP.NET MVC) nie jest po prostu bardziej wyszukaną lub droższą wersją drugiego (ASP.NET WebForms). Są to bardzo różne podejścia do tworzenia aplikacji internetowych przy użyciu ASP.NET.

Dla mnie największą różnicą architektoniczną między MVC a WebForms jest sposób, w jaki działają one z bezstanowym środowiskiem internetowym: WebForms ciężko pracuje nad stworzeniem zestawu abstrakcji, które ukrywają bezpaństwowy charakter programowania internetowego, podczas gdy MVC obejmuje bezstanowe środowisko i współpracuje z to.

Każde podejście ma swoje zalety i wady, ale naprawdę podoba mi się to, że tworzenie stron internetowych za pomocą MVC jest znacznie bardziej naturalne niż WebForms (z warstwą nieszczelnych abstrakcji ).

Eric King
źródło
1
te lubieżne abstrakcje są bardzo problematyczne. Nauka Asp .Net MVC otwiera oczy na protokół http
Michal Franc
10

Stare pytanie, ale zasługuje na bardziej szczegółową odpowiedź na wypadek, gdyby ktoś jeszcze miał z tym dylemat.

Ostatecznie, webforms to rozwiązanie typu cienki klient, przez co oznacza, że ​​naciskasz kilka ładnych przycisków, a front-end (klient) jest stworzony dla Ciebie. Jeśli masz ludzi, którzy wiedzą, jak to zrobić w formularzach internetowych i nie ma absolutnie żadnych problemów związanych z utrzymaniem / modyfikacją, a strona jest całkowicie krótkotrwała i jednorazowa, nie ma nic złego w tym podejściu. Można nauczyć się robić własne rzeczy, ale w tym przypadku wymagałoby to znajomości zarówno formularzy internetowych, które próbują chronić twórców aplikacji .NET, jak i wszystkich tych formularzy, które powodują, że większość twórców stron internetowych po stronie klienta chce zamordować Microsoft odpowiedzialni inżynierowie.

W 99,5% wszystkich innych scenariuszy przypadków użycia przestaliśmy próbować ukrywać sieć przed twórcami aplikacji, ponieważ naprawdę, jeśli chcesz pisać aplikacje internetowe, znacznie lepiej jest dowiedzieć się, jak działa sieć. Ironia rozwiązań typu gruby kontra cienki klient polega na tym, że podejście „cienki klient” nieuchronnie wysadza bzdury z twojego interfejsu i nie jest wcale skuteczne. Co ważniejsze, te rozwiązania zawsze czyniły rzeczy mało elastycznymi jak piekło dla ludzi, którzy faktycznie wiedzą, co robią i nie chcą być ograniczani przez obowiązujące ramy.

Nie ma nic tak bezsensownego, jak zabranie kogoś, kto wie wszystko o CSS, JavaScript, HTML, XHR i uczynienie ich całkowicie bezużytecznymi, blokując je na każdym kroku dzięki ramom, które ...

  • Usuwa wszystkie „niepotrzebne” tagi skryptów w tagach head, abyś nie popsuł zależności od skryptów. (lepiej pozwolić, aby „menedżer skryptów” zajął się tym za ciebie) To prawda, nikt nie stawia ich tam teraz, jeśli wiedzą, co robią, ale to tylko pomieszanie.

  • Nalega, aby zawinąć cały HTML w jeden gigantyczny znacznik formularza. HTML nie zezwala na formularze wewnątrz formularzy, dlatego formularze WWW są tworzone w dowolny sposób lub wcale.

  • Tworzy 18-etapowy „cykl życia” dla tego, co naprawdę powinno sprowadzać się do reagowania na zdarzenia interfejsu użytkownika poprzez interakcję z przeglądarką w celu wysyłania wiadomości do serwera, a następnie reagowania na reakcję serwera. Abstrahowanie od tego procesu za pomocą ogromnego stosu śmieci nigdy nie musiało się zdarzyć (i szczerze mówiąc, MS nie jest jedynym osłem, który próbował to zrobić).

  • Właściwie robi wszystko, co możliwe, aby przeszkadzać w korzystaniu z nieformalnych rozwiązań problemów. Przykład: gdy byłem młodszym deweloperem po stronie klienta, spędziłem cały dzień, szukając sposobu, aby przycisk wysyłania u góry strony uruchamiał przycisk wysyłania u dołu strony (zakładam, że z powodu tego jednego dużego rzecz gigantyczna). Zwykle zajęłoby to 5 minut, ale po kilku godzinach inżynierii wstecznej odpowiedzialnych za JavaScript formularzy internetowych odkryłem, że między innymi ustawiali właściwość, o której nawet wtedy nie wiedziałem, która mówi ci, jaki jest ostatni element formularza skupiono się na tym, aby po kliknięciu przycisku wysyłania działał tylko oficjalny przycisk Microsoft Prześlij (tm) w odniesieniu do aktywacji oficjalnego modułu obsługi Prześlij Microsoft (tm).

Więc nie, Rolls-Royce kontra Toyota, jest całkowicie nieuzasadniony. Powiedziałbym więcej: całkowicie rozsądny Hyundai, za który płacisz za dużo w porównaniu do zaprojektowanego przez Microsoft Pinto z systemem pokładowym, który automatycznie wykonuje ostre zakręty o 90 stopni, gdy odkryje, że kupiłeś gaz lub olej od kogoś innego niż Microsoft i wykryto wygodna ściana do zatrzaśnięcia. Idealny samochód dla samobójczego lojalnego kierowcy, który nie wie nic o sieci i chce przysięgać lojalność wobec Microsoft.

Całe .NET MVC jest naprawdę, jest proste i rozsądne, i nie tworzy nowej warstwy, aby uderzać w sieć. Po prostu działa z tym, co tam jest, aby pomóc Ci wybić dla ciebie trochę bojlera. Dostępne są lepsze / tańsze / wolniejsze frameworki, ale jeśli już zamknąłeś się na platformie .NET, możesz zrobić znacznie gorzej.

Ale poważnie, trzymaj! @ # $ Z dala od formularzy internetowych. Już prawie nie żyje. Odpuść sobie. Powiedz swoim klientom, że zrobisz to trzykrotnie więcej pieniędzy, jeśli obiecają ci również ekskluzywną i lukratywną umowę na wsparcie na całą godzinę, kiedy naprawdę będą chcieli zrobić coś nowego lub innego lub kiedy bzdury zaczną pękać, ponieważ nawet stwardnienie rozsiane nie może nie przejmuj się dodawaniem do tego olbrzyma 10 000 wiersza pliku ajax.js, który wyciągają ze swojej biblioteki DLL, gdzie nie można go dotknąć.

Erik Reppen
źródło
Cześć Erik uwielbiał twoją odpowiedź, więc masz moją upvot. Właśnie uczyłem się HTML 5 i CSS, więc Twój post był bardzo pouczający.
Czad
+1 Bardzo ładna odpowiedź! Unikam MVC od lat, ponieważ myślałem, że będzie to bardziej skomplikowane podejście do formularzy internetowych. Wygląda na to, że w rzeczywistości ułatwiłbym to, co staram się zrobić z formularzami internetowymi (np. Zawsze staram się unikać wszystkich Microsoft BS, takich jak Script Manager).
Drew Chapin,
6

Rozwiązanie ASP.NET MVC nie musi być bardziej skomplikowane niż rozwiązanie WebForms. Osobiście uważam, że ASP.NET MVC jest o wiele prostszy niż WebForms i zdecydowanie wydaje się być z natury czystszy.

Z mojego doświadczenia wynika, że ​​wiele frameworków MVC (ASP.NET, Rails, CodeIgniter itp.) Ma wiele takich samych podstawowych funkcji i konwencji. WebForms to naprawdę dziwna kaczka z perspektywy internetowej. Domyślam się, że większość programistów internetowych byłaby znacznie szybsza w pobieraniu ASP.NET MVC niż WebForms.

TaylorOtwell
źródło
5

Najważniejszym powodem, dla którego chciałbyś użyć ASP.NET MVC zamiast ASP.NET WebForms, jest testowalność. Pewnie, że możesz w pewnym sensie testować jednostkowo WebFormy, ale wymaga to kpienia z frameworków i dużo bólu. Drugi powód to to, że MVC sprawia, że łatwiej jest rozdzielić problemy. Może to zapewnić znaczne ponowne użycie kodu i luźny kod. Nie oznacza to, że nie można zrobić tego samego w ASP.NET z wzorcami takimi jak MVP.

Minusem MVC jest to, że tracisz wiele funkcji i które zostały wbudowane w WebForms w ciągu ostatniej dekady (prawie prawie). MVC przeszedł długą drogę od samego początku, aby zapewnić podobne funkcje.

Jeśli chodzi o wydajność, czy ktoś ma dowód, w jaki sposób technologia jest „szybsza”?

Nie sądzę, że jedno jest lepsze od drugiego. Bardzo podoba mi się środowisko MVC i korzystałem z niego z dużym powodzeniem, ale zawsze upewniam się, że wybrałem technologię pasującą do projektu.

Carlosfocker
źródło