Это устаревший вопрос с множеством ответов, но ни один из них не дал ответа, который я ожидал бы найти в списке.
Краткий ответ:
- Используйте ASP.NET MVC, если вы хотите правильно построить веб-приложение с современными соглашениями о программировании и принятыми в отрасли шаблонами для платформы ASP.NET. С другой стороны, вы должны будете знать, как работают HTML и клиентские ресурсы (Javascript, CSS), а также как нарастить мышление в MVC-программировании, которое имеет крутую кривую обучения, но достигает внезапного конца после того, как его освоили.
- Используйте веб-формы ASP.NET, если вы используете или хотите использовать GUI- ориентированный подход , RAD (Rapid Application Development) , метод перетаскивания мышью для быстрого прототипирования чего-либо, то есть поведение кнопки / сетки данных, связанное внутри 15 минут, и решение не предназначено для поддержки разработчиков. Или используйте веб-формы ASP.NET, если у вас есть опыт разработки GUI или Windows Forms и вы хотите перенести свои знания в Интернет.
Но чтобы посмотреть на это должным образом, вы должны понимать историю каждого.
Веб-формы ASP.NET были ответом Microsoft тем, кто создавал динамические веб-приложения, используя элементы управления ActiveX Visual Basic 6, библиотеки DLL VB6 на сервере и ASP Classic. В то время веб-разработка с использованием этих инструментов Microsoft была настоящей неразберихой. Наряду со всей платформой .NET Framework, которая стала результатом того, что Microsoft по существу обратилась к чертежной доске о том, как выполнять продуктивное бизнес-программирование в стеке Windows, ASP.NET Web Forms в свое время была удивительной и красивой.
Весь подход состоял в том, чтобы дать разработчикам лучшее из обоих миров, что-то очень похожее на разработку приложений для Windows, но с мощью интернет-сервисов. Идея заключалась в том, что, как и в случае VB6 / WinForms "Форма" (окно), веб-страница также является формой (как окно, см.) , И на этой форме вы можете перетаскивать метки, текстовые поля, сетки данных, кнопки и другие вещи, к которым привыкли разработчики VB / WinForms GUI.
Чтобы заставить кнопку что-то сделать, после перетаскивания ее просто дважды щелкните по ней в конструкторе и загляните в редактор кода, сообщая форме, что делать, когда происходит это событие «щелчка». Именно так разработчики графического интерфейса Windows создавали программное обеспечение с использованием инструментов графического интерфейса VB6 и конкурирующих инструментов, за исключением того, что теперь код выполняется на сервере! Вау!
Это была технология 2002 года. Удивительный и красивый в то время ответ на решения с графическим интерфейсом для разработки RAD с поддержкой интернета , он привнес ощущение силы в грязный мир разработчиков программного обеспечения, у которого были бизнес-цели, которых им нужно было достичь.
К сожалению, эта модель программирования подчеркивает столько метафоры программирования Windows GUI, что несет с собой бремя необходимых деталей реализации, весь обременяющий багаж, необходимый для размещения жизненных циклов событий, и убрание уродливых деталей простого HTML и скрипт, который будут выводить эти компоненты и элементы управления перетаскиванием. И, в конце концов, разработчикам, поддерживающим реальные приложения, неизбежно приходилось копаться в этих компонентах или писать свои собственные, и, следовательно, они должны были сражаться с помощью этой инфраструктуры, сражений, которые оставляли бы кучу за кучей кучи, потянув за волосы, и слезы.
Резервный. Помой свои руки. Давайте снова посмотрим на бизнес-проблему. Каковы наши бизнес-цели?
Нам нужно создавать и управлять веб-приложениями . Наши ограничения заключаются в том, что у нас есть Всемирная паутина, которая работает на HTTP, HTML, Javascript и CSS, а на сервере у нас есть бизнес-правила, базы данных и небольшое количество отличных языков программирования (например, C #). Нужна ли нам эта метафора Windows GUI для управления нашей методологией разработки? Почему мы не можем просто сосредоточиться на проблемах приложения и покончить с метафорами графического интерфейса?
Именно здесь вступает ASP.NET MVC. Он начался с восстания разработчиков, которые называли себя «Alt.Net» и хотели вернуться к правильным и чистым принципам разработки программного обеспечения. Больше не нужно суетиться, просто сосредоточьтесь на бизнес-целях и лучших практиках программного обеспечения.
В данном случае это действительно означает:
- Разделение проблем . Например, компонент данных не должен знать, как его данные будут отображаться, и разметка представления не должна быть обременена деталями конфигурации соединения с базой данных, и таким образом разработчик может сосредоточиться на своей проблемной области при редактировании и тестовый код.
- Экспозиция и полная поддержка для ознакомления с мелочами HTML и связанных ресурсов . В веб-формах HTML спрятан, разработчики не советуются с этим возиться. В ASP.NET MVC разработчикам рекомендуется управлять этими деталями; на самом деле это необходимость. Преимущество в том, что разработчик может заново научиться ценить чистую семантику HTML, CSS и сценариев и работать с ними, а не против них.
- Тестируемость бизнес-объектов . Контроллеры и модели намного лучше подходят для программного модульного тестирования, так что реализации могут быть проверены на соответствие бизнес-целям, а изменения могут быть проверены на предмет их поломки. С веб-формами было трудно тестировать, так как компоненты не были разработаны для индивидуального тестирования, а весь результат разработки вращался вокруг форм страниц и их жизненных циклов событий с густой взаимосвязью бизнес-логики и логики представления.
Обратите внимание, что HTML уже является языком разметки очень высокого уровня, а Javascript - языком программирования высокого уровня. Вся история была бы другой, если бы мы имели дело с языком ассемблера и C.
Далее, расширяя # 2, еще одна цель ASP.NET MVC - дать возможность разработчикам упорядочить детали интерфейса «части просмотра» своих решений и использовать богатую основу, на которой основывается остальная часть отрасли. платформа клиентского интерфейса.
Вы обнаружите, что разработчики ASP.NET MVC чувствуют себя как дома, используя богатые библиотеки Javascript и методы на стороне клиента, не борясь с архитектурой на стороне сервера. Первоначально это не имело место в ASP.NET Web Forms, потому что Web Forms вообще не хочет, чтобы вы смотрели на HTML или скрипт, кроме случаев, когда вам действительно нужно , и в этом случае будьте осторожны, это не для слабых сердца