MVC: почему разделение модели, вида и контроллера? - PullRequest
5 голосов
/ 12 августа 2011

Кроме «философских» аспектов, не является ли плохой идеей, чтобы мой контроллер также был моей моделью?

Кажется, это экономит время на программирование.Мне не нужно создавать логику между контроллером и моделью, поскольку это одно и то же.И я могу напрямую взаимодействовать с представлением.

Какой смысл отделять М и С?Является ли модульность, то есть возможность замены одной модели и набора контроллеров на другую, единственной причиной их разделения?Мне кажется, что «замена» модулей происходит намного реже, чем (например) необходимость обновления и модели, и контроллера, потому что что-то в модели меняется.


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

Ответы [ 7 ]

4 голосов
/ 12 августа 2011

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

Рассмотрим UITableViewController, который является контроллером.Теперь представьте, был ли он предназначен исключительно для обработки музыкальных треков (модель), и вам нужно было создать совершенно другой класс управления таблицами, когда вы хотите обрабатывать что-то еще.Избегание этого кошмара - вот почему MVC интенсивно используется в Какао.

Существуют и другие способы разделения вещей.Некоторые языки делятся на подклассы в большей степени, чем на делегирование.Но в Какао основным средством разделения программ является MVC, и он работает очень хорошо.

РЕДАКТИРОВАТЬ: Еще несколько причин из мира разработки коммерческих приложений.

  • Обработка памяти в MVC намного проще.Вы можете удерживать объекты вашей модели и выбрасывать ваши объекты вида (и многие из ваших объектов контроллера), когда они выходят за пределы экрана.

  • Проще сериализовать объекты модели, которые не обернутыс контроллерами и представлениями, и гораздо проще отображать одни и те же данные несколькими способами.Даже в «простом» текстовом редакторе вы можете захотеть сделать разделенный экран или иметь несколько окон, показывающих один и тот же документ.В MVC это очень просто.

Если вам не нужна гибкость сейчас или в будущем, вам не нужно много архитектуры.Но большинство реальных проектов не так просты.MVC вырос из опыта Xerox в написании больших программ и трудностей, с которыми сталкивались все вместе.


РЕДАКТИРОВАТЬ 2: Я смотрел на ваше предыдущее редактирование: «Это кажется страннымчто в простом калькуляторе, согласно концепции MVC, должен быть и контроллер, и представление для его настроек (например, настроек по умолчанию или чего-то подобного) ».

Именно в этом причина MVC.Казалось бы, сумасшествие - перекодировать все, что требуется для сохранения пользовательских настроек специально для приложения «Калькулятор»Вам нужно общее «пожалуйста, сохраните эти пользовательские настройки», которое полностью отделено от пользовательского интерфейса и которое вы можете использовать повторно.В OS X он называется NSUserDefaults, а приложение Calculator сохраняет свою конфигурацию именно таким образом.

3 голосов
/ 12 августа 2011

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

Вы должны использовать это? конечно, нет. Но хранить отдельные части обычно считается хорошей идеей.

2 голосов
/ 12 августа 2011

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

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

1 голос
/ 12 августа 2011

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

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

1 голос
/ 12 августа 2011

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

Представьте себе, что 10 разработчиков пытаются работать на вашем контроллере.Но все, что они хотят сделать, это добавить что-то в модель.Теперь твой контроллер сломался?Что они сделали?

0 голосов
/ 22 декабря 2013

Модель не зависит ни от вида, ни от контроллера.Это одно из ключевых преимуществ разделения.Такое разделение позволяет строить и тестировать модель независимо от визуального представления.

0 голосов
/ 13 августа 2011

MVC - это все об управлении (разделение данных, представление и бизнес-логика).Так что это так: если вы управляете небольшой компанией, управление размером в MS было бы настоящим тормозом.Но если вы гигантская корпорация, отсутствие большого среднего звена невозможно.

Честно говоря, в большинстве моих программных заданий в колледже я совмещал модели и контроллеров, потому что не видел необходимости разделения,Но работаешь над большими проектами?Недостаток будет довольно очевидным, если вы попытаетесь не отделиться.Просто делай то, что считаешь правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...