Ответы:
Основными преимуществами ASP.net MVC являются:
Включает полный контроль над отображаемым HTML.
Обеспечивает чистое разделение проблем (SoC).
Включает разработку через тестирование (TDD) .
Простая интеграция с фреймворками JavaScript.
Следуя дизайну безликого характера сети.
RESTful URL, которые позволяют SEO.
Нет событий ViewState и PostBack
Основным преимуществом веб-формы ASP.net являются:
Обеспечивает разработку RAD
Простая модель разработки для разработчиков, пришедших от разработки winform.
ASP.NET Web Forms и MVC - это две веб-среды, разработанные Microsoft - оба они являются хорошим выбором. Ни одна из веб-фреймворков не должна быть заменена другой, и не планируется их объединение в единую фреймворк. Непрерывная поддержка и развитие выполняются Microsoft параллельно, и ни один из них не исчезнет.
Каждая из этих веб-платформ имеет свои преимущества / недостатки, некоторые из которых необходимо учитывать при разработке веб-приложения. Веб-приложение может быть разработано с использованием любой технологии - оно может упростить разработку для конкретного приложения, выбирая одну технологию по сравнению с другой и наоборот.
Веб-формы ASP.NET:
ASP.NET MVC:
Аутентификация, авторизация, конфигурация, компиляция и развертывание - все это функции, которые совместно используются двумя веб-платформами.
Любой, кто достаточно взрослый, чтобы помнить классический ASP, вспомнит кошмар открытия страницы с кодом, смешанным с html и javascript - даже самая маленькая страница была болью, чтобы понять, какого черта она делает. Я могу ошибаться, и я надеюсь, что нет, но MVC похоже на возвращение в те плохие старые времена.
Когда появился ASP.Net, он был провозглашен спасителем, отделяющим код от контента и позволяющим веб-дизайнерам создавать html, а кодеры - работать над кодом. Если мы не хотели использовать ViewState, мы отключили его. Если по какой-то причине мы не хотим использовать код позади, мы можем поместить наш код в html, как классический ASP. Если мы не хотим использовать PostBack, мы перенаправляемся на другую страницу для обработки. Если мы не хотели использовать элементы управления ASP.Net, мы использовали стандартные элементы управления HTML. Мы могли бы даже опросить объект Response, если бы не хотели использовать ASP.Net runat = "server" в наших элементах управления.
Теперь кто-то в своей большой мудрости (возможно, кто-то, кто никогда не программировал классический ASP) решил, что пришло время вернуться к временам смешивания кода с контентом и назвать это «разделением интересов». Конечно, вы можете создать более чистый HTML, но вы могли бы с классическим ASP. Сказать «вы не программируете правильно, если у вас слишком много кода внутри вашего представления» - все равно, что сказать «если вы написали хорошо структурированный и прокомментированный код в классическом ASP, это намного чище и лучше, чем ASP.NET»
Если бы я хотел вернуться к смешиванию кода с контентом, я бы посмотрел на разработку с использованием PHP, который имеет гораздо более зрелую среду для такого рода разработки. Если есть так много проблем с ASP.NET, то почему бы не исправить эти проблемы?
И последнее, но не менее важное: новый движок Razor означает, что еще сложнее отличить HTML от кода. По крайней мере, мы могли бы искать открывающие и закрывающие теги, т.е. <% и%> в ASP, но теперь единственным указанием будет символ @.
Возможно, пришло время перейти на PHP и подождать еще 10 лет, чтобы кто-то снова отделил код от контента.
Если вы работаете с другими разработчиками, такими как PHP или JSP (и я предполагаю, что это рельсы) - вам будет намного проще конвертировать или сотрудничать на страницах, потому что у вас не будет всех этих «грязных» ASP.NET события и элементы управления везде.
Проблема с MVC состоит в том, что даже для «экспертов» это отнимает много драгоценного времени и требует больших усилий. Компании руководствуются базовым принципом «Быстрое решение, которое работает», независимо от технологии, стоящей за ним. WebForms - это RAD-технология, которая экономит время и деньги. Все, что требует больше времени, не приемлемо для бизнеса.
Самым большим преимуществом для меня было бы четкое разделение между вашими слоями Model, View и Controller. Это помогает продвигать хороший дизайн с самого начала.
Я не видел никаких преимуществ в MVC по сравнению с ASP.Net. 10 лет назад Microsoft придумала UIP (User Interface Process) в качестве ответа MVC. Это был провал. Мы тогда делали большой проект (4 разработчика, 2 дизайнера, 1 тестер) с UIP, и это был настоящий кошмар.
Не просто прыгнуть в подножку ради обмана. Все перечисленные выше преимущества уже доступны в Asp.Net (с более замечательными настройками [ Новые функции в Asp.Net 4 ] в Asp.Net 4).
Если ваша команда разработчиков или отдельные разработчики семей с Asp.Net просто придерживаются его и быстро делают красивые продукты, чтобы удовлетворить ваших клиентов (которые платят за ваше рабочее время). MVC съест ваше драгоценное время и даст те же результаты, что и Asp.Net :-)
Фрэнсис Шанахан,
Почему вы называете частичную обратную передачу "чепухой"? Это основная особенность Ajax, и она очень хорошо использовалась в инфраструктуре Atlas и замечательных сторонних элементах управления, таких как Telerik.
Я согласен с вашей точкой зрения относительно состояния. Но если разработчики осторожны, чтобы отключить viewstate, это может значительно уменьшить размер HTML-кода, который отображается, таким образом, страница становится легче.
Только элементы управления HTML-сервера переименовываются в модель веб-формы ASP.NET, а не чисто HTML-элементы управления. Как бы то ни было, почему вы так волнуетесь, если переименование сделано? Я знаю, что вы хотите иметь дело со многими событиями javascript на стороне клиента, но если вы будете грамотно разрабатывать свои веб-страницы, вы определенно сможете получить все идентификаторы, которые хотите
Даже ASP.NET Web Forms соответствует стандартам XHTML, и я не вижу вздутия. Это не оправдание того, почему нам нужен шаблон MVC
Опять же, почему вы обеспокоены AXD Javascript? Почему тебе больно? Это снова не обоснованное оправдание
До сих пор я фанат разработки приложений с использованием классических веб-форм ASP.NET. Например: если вы хотите связать выпадающий список или сетку, вам нужно максимум 30 минут и не более 20 строк кода (конечно, минимум). Но в случае MVC, поговорите с разработчиками, как это больно.
Самый большой недостаток MVC - мы возвращаемся ко временам ASP. Помните код спагетти смешивания кода сервера и HTML ??? Боже мой, попробуйте прочитать страницу aspx MVC, смешанную с javascript, HTML, JQuery, CSS, тегами сервера и прочее. Любое тело может ответить на этот вопрос?
Веб-формы также выигрывают от большей зрелости и поддержки со стороны сторонних поставщиков контроля, таких как Telerik.
В веб-формах вы также можете визуализировать практически весь html вручную, за исключением нескольких тегов, таких как viewstate, eventvalidation и аналогичных, которые можно удалить с помощью PageAdapters. Никто не заставляет вас использовать GridView или какой-либо другой серверный элемент управления с плохим выводом HTML-рендеринга.
Я бы сказал, что самое большое преимущество MVC - это СКОРОСТЬ!
Следующим является принудительное разделение интересов. Но это не запрещает вам помещать целую логику BL и DAL в контроллер / действие! Это просто разделение вида, что можно сделать и в веб-формах (например, шаблон MVP). Многие вещи, которые люди упоминают о mvc, могут быть сделаны в веб-формах, но с некоторыми дополнительными усилиями.
Основное отличие состоит в том, что запрос поступает в контроллер, а не в представление, и эти два слоя разделены, а не связаны через частичный класс, как в веб-формах (aspx + код позади)
Мои 2 цента:
MVC позволяет иметь более одной формы на странице, небольшая функция, которую я знаю, но она удобна!
Также шаблон MVC, который я чувствую, облегчает поддержку кода, особенно. когда вы вернетесь к нему через несколько месяцев.
runat="server"
тэг без формы не очень полезен, когда вы все еще хотите использовать веб-формы, и, поскольку вы не можете / не должны вкладывать формы, я думаю, что это довольно очевидно, что он имел в виду :)
Контроллер 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);
}
MVC View:
<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>
Насколько это сложно? No ViewState, No BS Page жизненный цикл ... Просто чистый эффективный код.
Я вижу только два преимущества для небольших сайтов: 6) RESTful URL, которые позволяют SEO. 7) Нет событий ViewState и PostBack (и вообще более высокая производительность)
Тестирование небольших сайтов не является проблемой, равно как и преимущества дизайна, если сайт в любом случае должным образом кодируется, MVC во многих отношениях запутывает и усложняет внесение изменений. Я все еще решаю, стоят ли эти преимущества того.
Я отчетливо вижу преимущество MVC на крупных сайтах для разработчиков.
Основное преимущество, которое я нахожу, заключается в том, что он заставляет проект стать более проверяемой. Это довольно легко сделать с помощью веб-форм (шаблон MVP), но от разработчика требуется понимание этого, многие этого не делают.
Webforms и MVC являются жизнеспособными инструментами, оба превосходны в разных областях.
Я лично использую веб-формы, так как мы в основном разрабатываем приложения B2B / LOB. Но мы всегда делаем это с помощью паттерна MVP, с помощью которого мы можем достичь 95 +% покрытия кода для наших модульных тестов. Это также позволяет нам автоматизировать тестирование свойств webcontrols. Значение свойства отображается в представлении, например:
bool IMyView.IsAdminSectionVisible{
get{return pnlAdmin.Visible;}
get{pnlAdmin.Visible=value;}
}
Я не думаю, что этот уровень тестирования так же легко достигается в MVC, не загрязняя мою модель.
Вы больше не чувствуете себя плохо, когда используете «не-постбэк контроль» - и пытаетесь понять, как заглушить их в традиционной среде asp.net.
Это означает, что современные (бесплатные в использовании) элементы управления javascript, такие как этот или этот или этот, могут быть использованы без попытки подгонки круглого колышка в форме квадратного отверстия.
Современные элементы управления javascript, а также запросы JSON могут быть легко обработаны с помощью MVC. Там мы можем использовать множество других механизмов для передачи данных из одного действия в другое. Вот почему мы предпочитаем MVC веб-формам. Также мы можем создавать легкие страницы.
Мое личное мнение таково, что
самым большим недостатком использования ASP.Net MVC является то, что он CODE BLOCKS
смешивается с HTML
...
html адом для разработчиков, которые его поддерживают ...