Подтвердить что ты не робот

Почему MVC так популярен?

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

  • Архитектура архитектуры MVC имеет 3 зависимости. Вид зависит от модели. Контроллер зависит от вида и модели. Модель независима.

  • Архитектурный шаблон слоев определяет зависимости N - 1, где N - количество слоев.

Учитывая три слоя: модель, представление и контроллер, есть только 2 зависимости, в отличие от 3 с традиционным MVC. Структура выглядит следующим образом:

View ---> Controller ---> Model

[Просмотр зависит от контроллера, контроллер зависит от модели]

Мне кажется, что этот стиль выполняет одни и те же цели и создает более слабую связь. Почему этот стиль не является более распространенным? Выполняет ли он по-настоящему одни и те же цели?

Изменить: Не ASP.NET MVC, просто шаблон.

Что касается сообщения griegs:

  • Что касается насмешек, Layers по-прежнему позволяет использовать шаблон Command Processor для имитации нажатия кнопок, а также для любого другого диапазона событий.
  • Изменения в пользовательском интерфейсе все еще очень просто, возможно, даже проще. В MVC контроллер и просмотр имеют тенденцию объединяться. Слои создают строгое разделение. Оба слоя являются черными ящиками, которые могут свободно меняться в процессе реализации.
  • Контроллер имеет 0 зависимостей от представления. Вид может быть записан, и время может быть сохранено с помощью свободной связи.
4b9b3361

Ответ 1

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

Профессор, недавно, направил меня в правильном направлении. По существу, он сказал мне следующее: Слои, которые разделяют Model, View и Controller , это MVC. В архитектурном шаблоне ванильного MVC зависимость между представлением к модели часто не используется, и вы фактически оказываетесь в слоях. Идея такая же, именование просто плохое.

Ответ 2

Потому что вы отделяете интерфейс от контроллера, делая изменения легче.

Также рассмотрите сценарий, в котором вам нужно начать работу над проектом, но художественные работы не будут готовы к неделям или месяцам. Подождите или напишите весь код, необходимый для страниц, и просто подключите представление к контроллеру.

По крайней мере, то, что мы сделали, и мы спасли месяцы.

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

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

И если вы говорите об инфраструктуре asp.net-mvc, в файлах aspx нет никакого кода и нет viewstate и т.д.

Ответ 3

В правильном MVC контроллер не зависит от вида afaik. Или, может быть, я не понимаю его правильно.

Модель определяет данные.

Представление определяет, как выглядит вывод.

И контроллер - это переводчик с понятной грамматикой для понимания грамматики.

Таким образом, по существу контроллер независим. Вид независим. И модель независима.

Да? Нет?

Ответ 4

Я получу смелость и попытаюсь объяснить, почему ваш метод не поймал.

Шаблон MVC в основном требует, чтобы уровни представления и модели согласовывали API. Поскольку один служит другому, и в коде нет зависимостей, он не позволяет контроллеру вести себя в целом, все, что ему нужно сделать, это взять определенную структуру на уровне представления и вызвать соответствующий API на уровне модели.

Вы заметите, что согласование API между представлением и моделью на самом деле не так важно, что это должно произойти в любом случае. И то, что вы получаете, - это хорошее разделение между внутренним интерфейсом разработки.

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

Посмотрите на некоторые примеры Struts2, чтобы понять, что я имею в виду...

Ответ 5

Думаю, я понимаю вашу мысль:

Да, вы можете заставить View только зависеть от контроллера только путем преобразования Controller (используя PHP в качестве примера) объекты Model для объектов, отличных от модели, таких как простые массивы.

Как мы уже знаем, выполнение этого преобразования может принести больше усилий, чем того стоит, если развязка на самом деле не нужна. Если View использует объекты Model, то он имеет эту зависимость. Тем не менее, это может быть немного облегчено за счет того, что представление зависит только от контроллера для его требуемого ввода, который может быть объектами модели.

Структура Symfony PHP поддерживает этот стиль тонкого контроллера, перемещающегося между Model и View. Вы можете по-прежнему напрямую ссылаться на слой модели для извлечения объектов в пределах слоя "Вид", но он настоятельно призывает к проблемам связи, которые вы вызываете. В представлении вы можете вызвать include_component(), который фактически возвращается к контроллеру, если вам нужно запросить модель.

Ответ 6

Выбор шаблона презентации для новой или корпоративной веб-разработки на платформе Microsoft - это сложная задача, на мой взгляд, всего три; View Model, Model-View-Presenter (MVP) или ASP.NET MVC (производная Model2).

Вы можете прочитать полную статью здесь Шаблоны ASP.NET MVC

Ответ 7

Я хотел бы добавить еще кое-что. Прежде всего, с моей точки зрения, мы используем модель в качестве контейнера для информации, которую хотим передать и показать на виде. Обычно метод действия в контроллере заканчивается обратным представлением ( "viewName", model). Представление, вероятно, изменит его план работы с моделью:

в представлении:

if (model.something == true) {

% >

 somethign, чтобы показать

<%

}

При этом определении модели трудно найти.

Я могу сказать (особенно на конгрессе предприятия) две "модели"

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

Контроллер организует представления и индивидуален из представления, но немного отличается от модели:

в контроллер

pulic actionResult Index() {

....

если (model.BoolProperty == TRUE) {

return ( "firstView" );

}

еще

{

return ( "secondView" );

}

}

Я надеюсь, что это имеет смысл

Ответ 8

На мой взгляд, вам лучше попробовать его в своей программе, вы можете использовать ruby ​​on rails или codeigniter (для php), эта отличная фреймворк может быть полезна для вашего понимания MVC.