На MVC требуется уточнение ответственности объекта - PullRequest
0 голосов
/ 12 октября 2011

Предположим, в рамках приложения для iphone мне нужно показать пользователю список некоторых объектов.

Модель

  • Представляет фактические объекты, которые будут показаны
  • Данные без мозгов, сбор геттеров и сеттеров

Вид

  • Отображает список, передает полученные действия контроллеру
  • Презентационный слой

Контроллер

  • Интерпретирует действия, полученные из представления, и выполняет действия с данными
  • Сидит между видом и данными

На этом изображении будет ответственность контроллера за сохранение модели на диске или она должна быть частью логики модели? Запрос на это поступит от контроллера, но должен ли контроллер знать, как сохранять данные на диск, или данные должны знать, как сохранить себя на диск?

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Это неправильно.

Модель отвечает за всю бизнес-логику.Кроме того, модель не знает напрямую о базе данных или любом другом носителе данных.Когда модель инициализируется, она получает фабрику для создания DAO или DataMappers, которые отвечают за хранение и извлечение информации.

Контроллер интерпретирует полученную информацию из представления и изменяет состояние модели и представления.

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

1 голос
/ 12 октября 2011

Я вижу, что это происходит в обоих направлениях. Я думаю, что эта логика входит в модель, так что контроллер немного чище. Кроме того, если вы используете эту функциональность в разных моделях, и она в основном соответствует, например, $person->saveData(), $user->saveData(), вы можете расширить базовую модель, чтобы она была унаследована другими моделями и избавить вас от дублирующегося кода.

Если эта логика включена в модель, возможно, было бы неплохо сделать ее достаточно гибкой, чтобы контроллер мог переопределять сохранение данных. Поэтому, возможно, передайте аргумент в функцию модели $person->save( false ). Этот false не позволит модели сохранить данные, но по умолчанию будет true.

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