многоуровневые веб-формы классифицируются как MVC? - PullRequest
1 голос
/ 17 февраля 2012

Где я работаю, у нас есть проект, написанный на .NET3.5 как проект веб-форм.Это многоуровневое;Уровень представления, логический уровень и данные позже.

У нас есть эти еженедельные «технические сессии» в работе.Я выступил с докладом о MVC.

Мой технический руководитель решил вмешаться и сказать, что вышеуказанный проект (многоуровневый, веб-формы) такой же, как и MVC.Далее он описал следующее:

  • Представления - это просто страницы ASPX
  • Контроллеры - это всего лишь страницы позади
  • Модели - это просто объекты данных

Короче говоря - мы вступили в нерешенную дискуссию по поводу того, представляет ли описанный выше проект (многоуровневая веб-формация) MVC или нет.

Может ли кто-нибудь предоставить и ответить на эту дискуссию?

Спасибо

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012

нет.MVC используется в основном для сильного разделения интересов.Контроллер и представление не связаны друг с другом и не знают о другом, кроме прохождения модели (или нет).один контроллер может использоваться для визуализации многих представлений, где код aspx сильно привязан к одной странице aspx, поскольку все они являются частью одного и того же частичного класса.модель менее отличается, за исключением того, что в большинстве приложений mvc модели не являются фактическими типами данных предметной области, а представляют собой некий составной элемент, который можно использовать для визуализации представления.

другая вещь, которая отличается отmvc - это жесткая иерархическая структура папок и соглашение об именах.это способствует распространению передового опыта и, опять же, разделению интересов.

Microsoft по какой-то причине создала фреймворк asp.net mvc, и хотя вы, возможно, сможете подражать некоторым ощущениям mvc в веб-формах, используя маршрутизацию и тому подобное, это не так и никогда не будетто же самое.

также, хотя это было сделано в сторону asp.net mvc, очевидно, есть много других недостатков.Я бы посоветовал вам также проверить FubuMVC .

1 голос
/ 18 февраля 2012

Если говорить прямо, технический руководитель ошибочен.

Существует распространенное заблуждение среди людей, которые никогда ранее не использовали настоящую инфраструктуру MVC, что «MVC» - это просто другой вид веб-форм, когда вНа самом деле, ничто не может быть дальше от истины.

Чтобы понять, почему это так, вам нужно понять разницу между MVC , архитектурным шаблоном и ASP.NET MVC , платформа, созданная Microsoft, которая реализует шаблон MVC.

Часто люди, такие как технические лидеры и архитекторы, которые не совсем понимают эту тему, используют термин «MVC» для описания как шаблона , так и структуры * 1016.* без понимания различий между ними, и это часто приводит к путанице.

Итак, чтобы быть ясным, шаблон MVC не является чем-то новым, и на самом деле он реализуется многими платформами, такими как:

Webforms - это , а не одна из платформ, которая реализует шаблон MVC из коробки.

Теперь верно, что вы можете реализовать шаблон MVC в WebForms, но Webforms больше подходят для реализации шаблона стиля MVP, и на самом деле существуют рамки (, такие как этот ), которые помогут вам в этом отношении.

Самый большой показательчто технический руководитель понятия не имеет, о чем он говоритэ-э, это:

Мой технический руководитель решил вмешаться и сказать мне, что вышеуказанный проект (многоуровневый, веб-формы) такой же, как MVC

Представление "Уровни »в ваше приложение не имеет ничего общего с MVC.Фактически, в рамках многоуровневой архитектуры приложение MVC будет полностью находиться на уровне презентации и не иметь никакого отношения к другим уровням приложения.

Использование ASP.NET MVC для внешнего интерфейса означает, что у вас есть презентацияуровень, который находится поверх ваших логических уровней, который реализован с использованием инфраструктуры ASP.NET MVC.Это не означает, что вы внезапно устранили необходимость в других уровнях просто потому, что используете MVC.

И наоборот, Webforms - это просто уровень представления в многоуровневой архитектуре.То, что вы используете многоуровневую архитектуру, ни в коем случае не означает, что вы используете шаблон MVC.

Для каждого из остальных пунктов:

Представления - это просто страницы ASPX Это не правда.Страницы ASPX - очень сложные звери и имеют одно существенное отличие между представлениями MVC:

Они предназначены для поддержания состояния

У них есть вся эта система жизненного цикла страницыа также viewstate и управляющие элементы, предназначенные для поддержания состояния между обратными передачами.

ASP.NET MVC разработан так, чтобы не сохранять состояния, и поэтому представления не содержат таких сложностей.

Контроллеры - это просто страничные элементы

Это утверждение полностью пропускает смысл контроллеров.

Codebehinds явно знают обо всем, что касаетсяпроцесс рендеринга страницы ASPX.Он знает об элементах управления на странице, состоянии страницы, жизненном цикле страницы и очень тесно связан с представлением.

Кодовый код всегда вернет только 1 вещь.Страница aspx.

Контроллеры гораздо более гибкие и могут возвращать не только представления, но и могут использоваться для управления логикой для рендеринга различных представлений вашегоданные.Например, вы можете захотеть, чтобы те же данные отображались как HTML для стандартного http-запроса, либо как JSON для AJAX-запроса.

Это возможно, поскольку логика контроллера и логика представления слабо связанные , что делает это возможным.

Модели - это просто объекты данных

Это неправильно. Это редкость в любом приложении MVC любой сложности, когда вы привязываете свои объекты данных непосредственно к представлению. Проще говоря, способ, которым ваши данные моделируются в базе данных, редко будет представлять данные, необходимые для отображения представления.

Например, скажем, у вас есть запись сотрудника, которая имеет "TitleId". Данные в записи будут просто int, но вам нужно будет отобразить фактическое текстовое значение для пользователя, чтобы оно имело какой-либо смысл.

Таким образом, в большинстве приложений MVC ваша «Модель» будет более точно описана как «ViewModel» и полностью отделена от ваших моделей данных или предметной области.

Подводя итог

Ваш технический лидер ошибочен, и не только неправильно на семантическом уровне, но и неправильно на уровне "ты не знаешь, о чем говоришь".

  • Использование многоуровневой архитектуры с веб-формами не означает, что вы внедрили шаблон MVC.
  • ASPX-страницы не похожи на представления
  • Codebehinds - не что иное, как контроллеры
  • Модели не имеют ничего общего с вашими объектами данных.

Надеюсь, это поможет.

1 голос
/ 17 февраля 2012

Поскольку шаблон MVC не зависит от какой-либо конкретной технологии (WebForms, WinForms, ASP.NET MVC и т. Д.).

Таким образом, на самом деле очень возможно сделать MVC в WebForms.

Файлы CodeBehind могут рассматриваться как контроллеры, но технически это неверно: и код файла, и файл aspx скомпилированы в один тип (так как они являются частичными классами), поэтому тип контроллера и тип представления отсутствуютв этом вопросе;) Но мы можем рассматривать это различие как незначительное.

Веб-формы МОЖНО рассматривать как нечто, реализующее паттерн MVC, признавая, что это очень уродливая реализация, которая может быть очень легко испорчена.Но как только он испорчен (как это обычно бывает), вся идея разделения, по крайней мере, нарушается между View и Controller, поэтому, если это разделение размыто или исчезает, мы должны сказать, что это больше не MVC.

Резюме: WebForms можно рассматривать как реализацию шаблона MVC, но в этой реализации очень трудно следовать этому шаблону, поэтому он очень редко остается MVC и остается в рамках своих концепций.

...