Картинка блога

Я немного знаком с ASP.NET MVC. Написал несколько проектов на этом фреймворке, один из них работает даже на Mono. Ребята, что закодили MVC наверно очень счастливы от своего детища. Как минимум они получили статус MVP и денег для хорошего отпуска. Может я чего-то и не понял, но я больше не собираюсь использовать ASP.NET MVC для своих проектов, как минимум до основательной переработки. Попробую объяснить почему.

  • По моему, ASP.NET MVC притянут за уши. Достаточно взглянуть в ASPX кишащий скобками с процентом для вставки какого либо параметра из модели. Мне это видится возвратом к php третей версии без использования шаблонов.
  • Вместо того, чтобы создать новый подход к рендерингу и созданию страниц, разработчики пошли другим, простым путем и расширили и без того тяжелый цикл жизни ASPX страницы. Теперь страница сама по себе ничего не делает, но продолжает содержать в себе огромное количество объектов и событий, которые никем больше не используются.
  • ASP.NET MVC убил самое ценное, чем ASP.NET мог гордится — Postback и Viewstate. Зачем мне теперь его использовать, если тоже-самое и еще больше можно получить например, от Python с Django за меньшее время?
  • Для чего вообще приставка MVC в ASP.NET? По моему в самом ASP.NET достаточно слоев, чтобы разделить логику. Codebehind можно использовать в качестве контроллера, а aspx в качестве представления. При этом создавать оба класса одним щелчком мыши, а не бегать по папкам и подтирать лишнее.
  • Такого количества «Best practice» я не видел ни в одном другом фремворке. Нет, мне не лень учить и следовать им, просто создается ощущение, что это не правила для повышения производительности разработчика, а ограничения, которым последний должен следовать, чтобы что-то в итоге все-таки получилось. Вот первая часть подтверждения, правда на английском.

Оговорюсь, что это просто мысли автора, построенные на собственном практическом опыте. Я не хотел никого обидеть или к чему-то призывать.

Метки:, ,

28 комментариев в “Так ли хорош ASP.NET MVC?”

  1. Чувак, ты мега прав, я кстати после него всё таки попробовал перейти на Django в надежде юзать линуксовые более дешёвые сервера, но это тоже только трата времени. Реально вернулся к старому доброму ASP.NET, но скорее как контейнер для девелопинга на C#, просто не использую всякие там рипитеры и гриды. Jquery и Ajax, приятно задышал.

  2. А я только вот хочу попробовать джангу. Мне нравится тот уровень абстракции, который там используется. Да и для Google App Engine подходит вроде как лучше всего.

  3. Больше всего проблем там от того, что нет человеческого дебага, так я его и не обнаружил. Плюс, быстро кодить сложно из-за того что это Python, к их пакетам и их названиям я так и не привык, а каждые 5 минут в документацию по каждой функции типа работы со строками. Отсутвие юникод. Задумки в стиле миграции базы, не удобные, намного проще кликать «Сохранить в Скрипт» в Sql Server. Вообщем flow одним словом.

  4. г-н Тараканофф
    18 марта, 2010 at 18:01

    «Codebehind можно использовать в качестве контроллера, а aspx в качестве представления». Так это всё равно потом компилируется в один класс, где смешано представление и контроллер, или не так? Класс в codebehind — это как правило partial. Страница .aspx затем дополняет его.

    Поясни.

  5. Нет, .ASPX файл не компилируется (если конечно об этом специально не попросить). В любом случае, я говорю о разделении кода во время разработки. Для меня не играет никакой роли тот факт, как программа выглядит после компиляции, лишь-бы выполнялась она быстро и не жрала лишних ресурсов.

  6. Вообщем flow одним словом

    Окунулся я вообщем в документацию и сорс, дело действительно идет медленно. Омрачает еще факт отсутствия возможности строгих типов — прощай Intellisence.

  7. хороший ресурс

  8. Вся модель, что построена на WebForms совершенно не позволят создавать очень гибкие приложения. Сколько я намучился с этим ASP.NET, пока не стал использовать ASP.NET MVC.
    Сейчас очень многое подвязано на ajax, соответственно в asp.net классическом это связано с UpdatePanel — глючнее и тупее я еще не видел реализаций обмена информации между клиентом и сервером.
    Тем более MVC, позволяет удобно использовать JS фрэймворки, что позволяет избавится от MS решения. к примеру jQuery. А для корпоративных порталов, я использую extJS.

    В итоге решение на классическом ASP.NET WEBForms это для людей которые совершенно не понимают что есть разработка для интернет.

    Изернет, я тоже преплету. Очень многие вещи на MVC решается в каких то одну-две операции, когда на WEBForms приходится перекодить очень многое, очень много лишнего изучить, понять как работает, и натнутся на то что это не реализуется вот так просто.
    К примеру UpdatePanel в Repeater — это ящик пандоры для багов.

    + MVC в том, что и дебагинг на нем производить куда проще.

    Желаю вам господа понимать что такое разработка для WEB и попробовать расширить свой кругозор.

    Кстати на заметку — многое в ASP.NET MVC было передернуто у RoR (Ruby). Читал, пробовал, замечательная весч.

  9. ASP.NET MVC придуман исключительно для гурманов супер объектно-ориентированного программирования. Вместо того , чтобы заниматься улучшением ASP(например многие наверное знают , что есть такой глюк как вызов Page_Load два раза и прочее) microsoft идёт по пути замутить воду. Сажать огромных объетивно -ориентированных монстров на хилый HTTP протокол — это просто смешно. К сожалению все эти нововведения как и по выпоску новых операционных систем, так и методов программирования основаны не на улучшении чего-либо , а на том, чтобы заработать на этом по-больше денег.

  10. Дорогой Павел («Сейчас очень многое подвязано на ajax, соответственно в asp.net классическом это связано с UpdatePanel — глючнее и тупее я еще не видел реализаций обмена информации между клиентом и сервером.»), кто вам мешает использовать jquery?
    Там тоже есть ajax, и вовсе никто вас не принуждает использовать UpdatePanel

  11. «например многие наверное знают , что есть такой глюк как вызов Page_Load два раза»

    Кэп подсказывает ставить AutoEventsWireup=»false» в директиве @Page.

  12. «ASP.NET MVC убил самое ценное, чем ASP.NET мог гордится — Postback и Viewstate» — мусор, от которого нужно было избавляться. Автор видимо не писал ничего серьезного, возможно, что то не понимал. Прошло много времени, надеюсь до него дошло.

  13. Автору спасибо, я думал, что я один такой — ностальгирую по viewstate)) Это мощь, максимум, что можно было выжать из HTTP. Не у всех хватило терпения освоить webforms дальше Design mode, а жаль. Самый частый аргумент хулителей webforms, который я слышал: «Viewstate — это борода, мне не нравится, я же программист и смотрю в разметку, а там некрасивая борода»

  14. Прошло вермя и ASP.NET MVC подрос, доказал свою состоятельность..

  15. Подрос-то он, конечно, подрос. Но суть осталась — как был херней наподобие PHP — таким и остался. И уж идеологию MVC ну никак не реализует. Скорее ее реализует как раз WebForms.

    Что касается недостатков WebForms, тут указанных — читайте документацию, что ли… Аякс прекрасно работает с ним, и что тут некоторым далась эта UpdatePanel? Ну не используйте ее — какие проблемы? Знаний не хватает?
    В свое время, когда служил в армии, мне всегда говорили — основная форма обучения офицера — самостоятельная подготовка. Аналогично это относится и к программистам. Если учиться исключительно по чужим проектам, по доброте душевной выложенным в сеть, то конечно — MVC супер! Особенно, если пришел к нему от PHP. Однако, если почитать внимательно доки по WebForms — то окажется, что он не хуже, а программировать проще. И самое главное, можно реально отделить дизайн от программирования…

  16. «самое ценное, чем ASP.NET мог гордится — Postback и Viewstate» — большего бреда в жизни не слышал. Это как раз то, что в первую очередь заставило отказаться от асп.нет. Идея превратить веб-приложение в десктоп ущербна до мозга костей. Да и реализация ее — сплошной костыль с непонятными ограничениями вроде одной формы на страницу. А как же в3ц стандарты? Та ну на.. Да, можно не юзать апдейт пэнел, можно свои контролы даже написать, которые даже будут генерировать вменяемый хатмэль с нормальной поддержкой цсс. Все можно. Но тогда уж точно потеряется ЕДИНСТВЕННОЕ преимущество асп.нет — скорость разработки. Весь смысл асп.нет — позволить любой обезьяне которая может накидать батонов на форму писать веб-приложения.

  17. Полностью согласен с топикстартером. Мне MVC кажется скорее возвратом к классическому ASP, чем шагом вперед. Все его «фичи», типа мнимого разделения и рутинга, я легко реализовывал и в webforms. razor — отстой и никакой не шаг вперед по сравнению с . Стало много хуже и путаннее. Использование серверных контролов, контролов и Codebehind в webforms было супер. Архитектуру приложения можно было накрутить любую, в т.ч. и «MVC».
    Viewstate я хранил всегда в сессии на сервере, и знать не знал, что она вообще есть. В коле страницы ее нет. Postback — великая вещь. С ajax вообще никаких проблем и глюков, что от MS, что с JQuery.
    Чистый код на выходе у mvc? Ну разве что. Но какой ценой и что собственно он дает юзеру? В webforms 4.0 достигается тоже самое, при желании.
    В общем, имхо, MVC отстой полный. Структура проекта получается громоздкой. Интерфейсов никаких. Не понятно, откуда взялась эта идея в больных головах, пропихивать его везде и делать «стандартом».
    На Webforms писал 6 лет и дальше планирую. Непонявшим его желаю разобраться и оценить его реальную мощь для проектов любой сложности.

  18. «Нет, .ASPX файл не компилируется (если конечно об этом специально не попросить).»

    Вы имеете в виду случай, когда не компилируется .ASPX файл, который никогда никто не создавал, или когда был создан сайт с .ASPX файлом, который никогда не запускался, или же веб-приложение, которое вы не попросили, чтобы оно не компилировалось? Вы серьезно? А как по Вашему, ну хотя бы, выставляются проперти к контролам, значения которых Вы выставляете в атрибутах на aspx странице в тегах, описывающих контролы, не говоря уже о других вещах, которые содержатся в aspx?

  19. «MVC супер! Особенно, если пришел к нему от PHP.»

    Забавно, но об этом судят люди, которые не переходили от пхп к asp.net mvc, я так понимаю. Я перешел к WebForms от WinForms, по началу круто, но потом, когда больше узнаешь о вебе, понимаешь, что событийная модель аналогичная WinForms не очень-то красиво укладывается в рамки, куда ее засунули. Понаделали там костылей с ViewState, событийная модель сильно усложнилась. НЕ веб-приложения получается, а какой-то набор трудно тестируемых хэндлеров событий. Кучу всего приходится делать через одно место из-за этой событийной модели на сложной странице, например, где контролы подгружаются динамически и обмениваются данными между собой. Интересный костыль конечно прикрутить состояние к http, но постоянно этим пользоваться… Я вообще не понимаю людей, которые попробовали MVC и все равно отдают предпочтение WebForms. Мне кажется вы мыслите категориями WebForms и так и не успели почувствовать всю прелесть asp.net mvc, уже после одного большого проекта на mvc, вспоминая о WebForms хочется плеваться, ну или пытаться там писать в похожем стиле, что не всегда так же быстро и возможно.

  20. Те кто пишут что WebForms это круто — вы умерли как веб программист т.к. для вас видим слова IoC, DI, TDD — ничего не значат. ASP.NET MVC безусловно классный фреймворк — позволяет контролировать почти все аспекты разработки приложения. Язык C# очень выразительный и удобный. Единственный минус разработки на ASP.NET это IIS т.к. IIS и highload в одном предложении не совместимы(да и честно говорят врятли будут). Не смотря на то что есть классный язык и фреймворк для написания отличных веб приложений, стремно все это держать на убогом веб сервере как IIS. Так что в данный момент изучаю javaEE(Хотя java как язык не так нравится как c#) зато Linux + разнообразие веб сервров.

    PS^ на работе сталкиваюсь с проектом который до сих пор висит на WebForms — смотрю на него как на г*вн*

  21. не понимаю из-за чего холивар по поводу ViewState.
    в ASP.NET MVC все забыли про hiddenField?

  22. https://lurkmo.re/PHP

  23. «IIS и highload в одном предложении не совместимы» что за бред? Вы хотите сказать, что такие сайты как WebMoney, stackoverflow, plati.ru не высоконагруженны? Да я себе представить не могу сколько за секунду обрабатывают эти сайты информации. Это одни из самых высоконагруженных сайтов в мире и все они работают на IIS, причем я сомневаюсь, что на 8 версии, которая стала еще лучше. Так что не говорите чушь про IIS. Сам сайт MS на IIS и вряд ли кто видел, что бы он падал

  24. Полностью согласен с Павлом. Говорить, что сервер IIS убогий, просто указывать на свою крайнюю некомпетентность в знаниях архитектуры IIS, да и еще плюс показать себя хамом. Для IIS 7 c его модульной архитектурой нет невозможного как по функционалу так и по балансировкам нагрузки. Более того, в сети Интернет на данном сервере работает 37.07% в сентябре 2014, на Apache 34.94%. В корпоративном секторе IIS используется в 80-90% web-проектов. И не думайте, что это любовь к Microsoft. Это просто трезвый взгляд на архитектуру, которая в IIS -6 была революционно изменена, а в IIS-7 еще значительна улучшена, вобщем то можно сказать, также революционно.

  25. Мировая тенденция: все больше и больше работы сейчас отдается на сторону браузера, на сторону JavaScript.
    Все больше и больше сайтов работают по принципу single page application.
    И здесь весь мир идет в сторону использования JS фреймворков, таких как Angular, Knockout и другие…
    JS-фреймворки, я не имею ввиду сейчас jquery, я имею ввиду именно JS MVVM и MVC фреймворки… А также те JS-фреймворки, которые превращают простую верстку в мощные визуальные контролы средствами простого javascript, без единой строчки кода на сервере…
    В приложении типа SPA между клиентом и сервером гоняется только json. А классы JS модели на клиенте при помощи фреймворков творят чудеса…
    Кароче: классический WebForms — это позавчерашний день. Увы.
    Сорри, немного сумбурно изложил…

  26. На самом деле. обе технологии хороши по своему, конечно, какую нибудь социальную сеть писать однозначно mvc, а вот если ты пишешь приложение с со сложным интерфейсом, и чтоб еще с ajax то скорость разработки увеличиватеся в разы, хотя гибкость mvc несомненно выше. Представьте себе что нужно создать ajax таблицу, чтобы они имела несколько совершенно разных функциональных кнопок, а данные столбцов обертывались на лету, и то и то можно без сомнения реализовать и в webForm и в mvc но в webform намного меньше времени. В MVC модели данных и шаблонов задолбаешься создовать, но они будит быстрей, тут должен выбирать разработчик исходя из того что имеет и что ему нужно. Заказчик доволен, значит все сделано правильно.

  27. Аполиннарий
    9 мая, 2015 at 15:05

    ТАКОГО ОТСТОЯ, как фреймворки я еще в жизни не встречал. технологии активно втюхиваемые, которые никому НЕ НУЖНЫ, сложны и притянуты за уши.

  28. я перешел с PHP laravel, codeigniter к ASP.NET MVC 5 Доволен без мерно, летая как ангел когда пишу сайты на нем. Статья выше устарела на 5 лет. Уже давно появился ASP.NET 5 или MVC 6, который вообще-то open source, кроссплатформенный да еще и от мелкомягких.