Odpowiedzi:
Główne zalety ASP.net MVC to:
Umożliwia pełną kontrolę nad renderowanym kodem HTML.
Zapewnia czyste oddzielenie problemów (SoC).
Łatwa integracja z frameworkami JavaScript.
Zgodnie z projektem sieci o bezpaństwowym charakterze.
RESTful URL, które umożliwiają pozycjonowanie.
Brak zdarzeń ViewState i PostBack
Główną zaletą formularza internetowego ASP.net są:
Zapewnia rozwój RAD
Prosty model rozwoju dla programistów wywodzących się z rozwoju winform
ASP.NET Web Forms i MVC to dwie platformy internetowe opracowane przez firmę Microsoft - obie są dobrym wyborem. Żadna z platform internetowych nie zostanie zastąpiona drugą ani nie ma planów ich „scalenia” w jedną strukturę. Ciągłe wsparcie i rozwój są realizowane równolegle przez Microsoft i żadne z nich nie będzie „odchodzić”.
Każda z tych platform internetowych ma zalety / wady - niektóre z nich należy wziąć pod uwagę podczas tworzenia aplikacji internetowej. Aplikację internetową można opracować przy użyciu dowolnej technologii - może to ułatwić tworzenie konkretnej aplikacji, wybierając jedną technologię z drugiej i odwrotnie.
Formularze sieci Web ASP.NET:
ASP.NET MVC:
Uwierzytelnianie, autoryzacja, konfiguracja, kompilacja i wdrażanie to funkcje współdzielone między dwiema platformami sieciowymi.
Każdy wystarczająco dorosły, by zapamiętać klasyczne ASP, pamięta koszmar otwierania strony z kodem zmieszanym z html i javascript - nawet najmniejsza strona była trudna do zorientowania się, co do cholery robi. Mogę się mylić i mam nadzieję, że tak, ale MVC wygląda jak powrót do tych złych starych czasów.
Kiedy pojawił się ASP.Net, został okrzyknięty wybawcą, oddzielając kod od treści i pozwalając nam projektantom stron internetowych tworzyć HTML, a koderom pracować nad kodem. Jeśli nie chcieliśmy używać ViewState, wyłączyliśmy go. Gdybyśmy z jakiegoś powodu nie chcieli używać kodu z tyłu, moglibyśmy umieścić nasz kod wewnątrz html, tak jak w klasycznej ASP. Jeśli nie chcieliśmy korzystać z PostBack, przekierowywaliśmy na inną stronę do przetworzenia. Jeśli nie chcieliśmy używać kontrolek ASP.Net, używaliśmy standardowych kontrolek HTML. Moglibyśmy nawet przesłuchać obiekt Response, gdybyśmy nie chcieli używać ASP.Net runat = "server" na naszych kontrolkach.
Teraz ktoś w swojej wielkiej mądrości (prawdopodobnie ktoś, kto nigdy nie programował klasycznego ASP) zdecydował, że nadszedł czas, aby cofnąć się do czasów mieszania kodu z treścią i nazwać to „oddzieleniem problemów”. Jasne, możesz stworzyć czystszy HTML, ale możesz to zrobić z klasycznym ASP. Powiedzenie „nie programujesz poprawnie, jeśli masz zbyt dużo kodu w widoku”, jest jak powiedzenie „jeśli napisałeś dobrze skonstruowany i opatrzony komentarzami kod w klasycznym ASP, jest on znacznie czystszy i lepszy niż ASP.NET”
Gdybym chciał wrócić do mieszania kodu z zawartością, przyjrzałbym się programowaniu przy użyciu PHP, które ma znacznie bardziej dojrzałe środowisko do tego rodzaju programowania. Jeśli jest tak wiele problemów z ASP.NET, dlaczego nie rozwiązać tych problemów?
Wreszcie, nowy silnik Razor oznacza, że jeszcze trudniej jest odróżnić html od kodu. Przynajmniej moglibyśmy szukać tagów otwierających i zamykających, tj. <% I%> w ASP, ale teraz jedynym wskazaniem będzie symbol @.
Być może nadszedł czas, aby przejść na PHP i poczekać kolejne 10 lat, aż ktoś ponownie oddzieli kod od treści.
Jeśli pracujesz z innymi programistami, takimi jak PHP lub JSP (i zgaduję, że rails) - znacznie łatwiej będzie ci konwertować lub współpracować na stronach, ponieważ nie będziesz mieć tych wszystkich „paskudnych” ASP.NET zdarzenia i kontrole wszędzie.
Problem z MVC polega na tym, że nawet dla „ekspertów” pochłania on dużo cennego czasu i wymaga dużego wysiłku. Firmy kierują się podstawową zasadą „Szybkie rozwiązanie, które działa” niezależnie od technologii. WebForms to technologia RAD, która oszczędza czas i pieniądze. Wszystko, co wymaga więcej czasu, jest nie do przyjęcia przez firmy.
Największą zaletą dla mnie byłby wyraźny podział między warstwami modelu, widoku i kontrolera. Pomaga promować dobry design od samego początku.
Nie widziałem ŻADNEJ przewagi w MVC nad ASP.Net. 10 lat temu Microsoft wymyślił UIP (User Interface Process) jako odpowiedź na MVC. To była flop. Zrobiliśmy wtedy duży projekt (4 programistów, 2 projektantów, 1 tester) z UIP i był to czysty koszmar.
Nie wskakuj tylko w modę ze względu na Hype. Wszystkie wymienione powyżej zalety są już dostępne w Asp.Net (z większymi ulepszeniami [ Nowe funkcje w Asp.Net 4 ] w Asp.Net 4).
Jeśli Twój zespół programistów lub jedna rodzina programistów korzystająca z Asp.Net, po prostu trzymaj się tego i szybko twórz piękne produkty, aby zadowolić klientów (którzy płacą za godziny pracy). MVC pochłonie Twój cenny czas i da takie same wyniki, jak Asp.Net :-)
Francis Shanahan,
Dlaczego częściowe ogłaszanie zwrotne nazywasz „bzdurą”? Jest to podstawowa funkcja Ajax i została bardzo dobrze wykorzystana w ramach Atlas i wspaniałych kontrolkach innych firm, takich jak Telerik
Zgadzam się z twoim punktem widzenia dotyczącym stanu widzenia. Ale jeśli programiści ostrożnie wyłączają stan widoku, może to znacznie zmniejszyć rozmiar renderowanego kodu HTML, dzięki czemu strona stanie się lekka.
Tylko kontrolki serwera HTML są zmieniane w modelu formularzy sieci Web ASP.NET, a nie czyste kontrolki HTML. Cokolwiek by to nie było, dlaczego tak się martwisz, jeśli zmiana nazwy zostanie zakończona? Wiem, że chcesz radzić sobie z wieloma zdarzeniami javascript po stronie klienta, ale jeśli elegancko projektujesz swoje strony internetowe, zdecydowanie możesz uzyskać wszystkie identyfikatory, które chcesz
Nawet ASP.NET Web Forms spełnia standardy XHTML i nie widzę żadnego wzdęcia. To nie jest uzasadnienie, dlaczego potrzebujemy wzorca MVC
Ponownie, dlaczego przejmujesz się skryptem AXD Javascript? Dlaczego cię to boli? To znowu nie jest ważne uzasadnienie
Do tej pory jestem fanem tworzenia aplikacji przy użyciu klasycznych formularzy internetowych ASP.NET. Na przykład: jeśli chcesz powiązać listę rozwijaną lub widok siatki, potrzebujesz maksymalnie 30 minut i nie więcej niż 20 linii kodu (oczywiście minimalnie). Ale w przypadku MVC porozmawiaj z programistami, jaki to ból.
Największym minusem MVC jest to, że cofamy się do czasów ASP. Pamiętasz kod spaghetti mieszania kodu serwera i HTML ??? O mój Boże, spróbuj odczytać stronę MVC aspx zmieszaną z javascript, HTML, JQuery, CSS, tagami serwera i co nie ... Każda treść może odpowiedzieć na to pytanie?
Formularze internetowe zyskują również na większej dojrzałości i wsparciu ze strony zewnętrznych dostawców kontroli, takich jak Telerik.
W formularzach internetowych można również renderować ręcznie prawie cały kod HTML, z wyjątkiem kilku tagów, takich jak stan widoku, walidacja zdarzeń i podobne, które można usunąć za pomocą PageAdapters. Nikt nie zmusza Cię do korzystania z GridView lub innej kontrolki po stronie serwera, która ma złe dane wyjściowe renderowania HTML.
Powiedziałbym, że największą zaletą MVC jest SZYBKOŚĆ!
Następny jest wymuszony rozdział troski. Ale to nie zabrania umieszczania całej logiki BL i DAL w kontrolerze / akcji! To po prostu oddzielenie widoku, co można zrobić również w formularzach internetowych (na przykład wzorzec MVP). Wiele rzeczy, o których ludzie wspominają w przypadku mvc, można wykonać w formularzach internetowych, ale wymaga to dodatkowego wysiłku.
Główną różnicą jest to, że żądanie dociera do kontrolera, a nie do widoku, a te dwie warstwy są oddzielone, a nie połączone za pośrednictwem częściowej klasy, jak w formularzach internetowych (aspx + kod za)
Moje 2 centy:
MVC pozwala mieć więcej niż jeden formularz na stronie. Mała funkcja, którą znam, ale jest przydatna!
Również wzorzec MVC, który moim zdaniem sprawia, że kod jest łatwiejszy w utrzymaniu, szczególnie. kiedy odwiedzasz go ponownie po kilku miesiącach.
runat="server"
tagu innego niż formularz, kiedy nadal chcesz używać formularzy internetowych, a ponieważ nie możesz / nie powinieneś zagnieżdżać formularzy, myślę, że to dość oczywiste, co miał na myśli :)
Kontroler MVC:
[HttpGet]
public ActionResult DetailList(ImportDetailSearchModel model)
{
Data.ImportDataAccess ida = new Data.ImportDataAccess();
List<Data.ImportDetailData> data = ida.GetImportDetails(model.FileId, model.FailuresOnly);
return PartialView("ImportSummaryDetailPartial", data);
}
Widok MVC:
<table class="sortable">
<thead>
<tr><th>Unique Id</th><th class="left">Error Type</th><th class="left">Field</th><th class="left">Message</th><th class="left">State</th></tr>
</thead>
<tbody>
@foreach (Data.ImportDetailData detail in Model)
{
<tr><th>@detail.UniqueID</th><th class="left">@detail.ErrorType</th><th class="left">@detail.FieldName</th><th class="left">@detail.Message</th><th class="left">@detail.ItemState</th></tr>
}
</tbody></table>
Czy to jest trudne? Brak ViewState, brak cyklu życia strony BS ... Po prostu czysty, wydajny kod.
Widzę jedyne dwie zalety dla mniejszych witryn: 6) RESTful URL, które umożliwiają pozycjonowanie. 7) Brak zdarzeń ViewState i PostBack (i ogólnie większa wydajność)
Testowanie małych witryn nie stanowi problemu, podobnie jak zalety projektowe, gdy witryna i tak jest poprawnie zakodowana, MVC na wiele sposobów zaciemnia i utrudnia wprowadzenie zmian. Nadal zastanawiam się, czy te zalety są tego warte.
Wyraźnie widzę przewagę MVC w większych witrynach dla wielu programistów.
Główną korzyścią, jaką uważam, jest to, że wymusza na projekcie bardziej testowalną strukturę. Można to dość łatwo zrobić również za pomocą formularzy internetowych (wzorzec MVP), ale wymaga to od programisty zrozumienia tego, wielu nie.
Formularze internetowe i MVC są użytecznymi narzędziami, które wyróżniają się w różnych obszarach.
Osobiście korzystam z formularzy internetowych, ponieważ tworzymy przede wszystkim aplikacje B2B / LOB. Ale zawsze robimy to ze wzorcem MVP, dzięki któremu możemy osiągnąć 95 +% pokrycia kodu dla naszych testów jednostkowych. Pozwala nam to również zautomatyzować testowanie właściwości webcontrols, wartość właściwości jest eksponowana przez widok np
bool IMyView.IsAdminSectionVisible{
get{return pnlAdmin.Visible;}
get{pnlAdmin.Visible=value;}
}
) Nie sądzę, aby ten poziom testowania był tak łatwy do osiągnięcia w MVC, bez polutowania mojego modelu.
Nie czujesz się już źle, używając `` kontrolek innych niż post-back '' - i zastanawiasz się, jak zmusić je do tradycyjnego środowiska asp.net.
Oznacza to, że nowoczesne (swobodnie korzystać) kontrole javascript takie to albo to albo to może być stosowane bez że wszyscy starają się dopasować okrągły kołek w kwadratowej dziury czuję.
Osobiście uważam, że największą wadą korzystania z ASP.Net MVC jest to, że CODE BLOCKS
zmieszane z HTML
...
piekłem html dla programistów, którzy go utrzymują ...