Какой код должен пойти где в структуре MVC

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

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

  1. Например, в регистрирующемся пользовательском процессе. Я не могу только закончить этот процесс в пользовательской модели, потому что, я должен использовать другие модели также (отправляющий письма, создавая другие записи для пользователя с помощью других моделей) и сделать много сложных проверок с помощью других моделей.
  2. Например, в некоторых сложных процессах поиска, я должен получить доступ к большому количеству моделей (статьи, видео, изображения и т.д.)
  3. Или, иногда, я должен использовать пчелу для решения то, что я сделаю затем или какую модель базы данных я буду использовать для записи данных

Таким образом, где место состоит в том, чтобы сделать, это усложнило процессы. Я не хочу делать их в контроллерах, поскольку иногда я должен использовать эти процессы в других контроллерах также. И я не хочу помещать, они обрабатывают в моделях, потому что, я использую модели в качестве слоев доступа к базе данных.May быть, я неправ, я хочу знать. Спасибо за Ваш ответ.

5
задан Oguz Bilgic 7 May 2010 в 04:04
поделиться

5 ответов

Для простых задач я бы написал помощники действий (например, sendNewsletter).

Для сложных задач я бы создал сервисы (например, email, auth и т.д.).

1
ответ дан 14 December 2019 в 13:29
поделиться

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

3
ответ дан 14 December 2019 в 13:29
поделиться

В MVC вы должны поместить эти элементы в модель (для одной из причин повторного использования).

Однако в HVMC вы можете разместить их где угодно (например, в контроллере) и вызывать контроллеры из вашего приложения.

1
ответ дан 14 December 2019 в 13:29
поделиться

Что плохого в том, что контроллер использует несколько моделей? Разве смысл MVC не в том, чтобы сделать модель многократно используемой? В вашем первом сценарии совершенно нормально отправлять электронные письма и манипулировать другими объектами модели из того места, где находится код контроллера "зарегистрировать пользователя".

Что касается вашего второго сценария, почему SearchController не может использовать ArticleModel, ImageModel и VideoModel? Вполне нормально иметь контроллер без модели. SearchController не нуждается в классе SearchModel, он просто использует другие классы моделей.

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

  1. Валидация ввода
    1. Если входные данные не действительны, отобразить форму с ошибкой
  2. Создать новый объект UserModel из входных данных формы
  3. Вставить новый объект UserModel в базу данных
  4. Создать/редактировать любые другие объекты модели, которые необходимы
  5. Отправить письмо новому пользователю
  6. Отобразить страницу "регистрация успешна"

То, как эти шаги будут закодированы, во многом зависит от используемого фреймворка/архитектуры.

0
ответ дан 14 December 2019 в 13:29
поделиться

Я бы сделал ваши контроллеры простыми.

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

Лично я стараюсь, чтобы мои модели напоминали объекты реального мира, а не таблицы или строки баз данных. Это делает его намного проще, если вы заставили вещи говорить в более читаемых терминах. Один объект реального мира может включать в себя 5 или 6 таблиц базы данных... И было бы довольно большой хлопотой поговорить с 5 или 6 моделями, когда все, что вы хотите сделать, это включить переключатель, или сорвать цветок, или нарисовать иконку, или отправить сообщение.

1
ответ дан 14 December 2019 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: