Моя проблема находится в где-нибудь между моделью и контроллером. Все работает идеально подходящее для меня, когда я использую MVC только для грязи (создайте, считайте, обновите, удалите).I имеют отдельные модели для каждой таблицы базы данных.I, получают доступ к этим моделям от контроллера, для превращения в творог их. Например, в приложении контактов, у меня есть действия (создайте, считайте, обновите, удалите) в контроллере (контакт) для использования модели (контакт) методы (создают, читают, обновляют, удаляют).
Проблема запускается, когда я пытаюсь сделать что-то более сложное. Существуют некоторые сложные процессы, которые я не знаю, куда я должен поместить их.
Таким образом, где место состоит в том, чтобы сделать, это усложнило процессы. Я не хочу делать их в контроллерах, поскольку иногда я должен использовать эти процессы в других контроллерах также. И я не хочу помещать, они обрабатывают в моделях, потому что, я использую модели в качестве слоев доступа к базе данных.May быть, я неправ, я хочу знать. Спасибо за Ваш ответ.
Для простых задач я бы написал помощники действий (например, sendNewsletter).
Для сложных задач я бы создал сервисы (например, email, auth и т.д.).
Просто короткий комментарий (без решения). AFAIK, это вечный вопрос - MVC - это всего лишь шаблон, и как таковой теоретически вполне реализуем. На практике из-за ограничений, установленных доступными инструментами (такими как содержимое библиотеки языков программирования и дизайн интерфейса компонентов пользовательского интерфейса ...), вы должны принимать локальные решения. Важно то, что вы стремитесь разделить их ... и не иметь все в одном беспорядке. Я снимаю свой комментарий с эфира, и мне остается посмотреть, есть ли у кого-нибудь «окончательное решение».
В MVC вы должны поместить эти элементы в модель (для одной из причин повторного использования).
Однако в HVMC вы можете разместить их где угодно (например, в контроллере) и вызывать контроллеры из вашего приложения.
Что плохого в том, что контроллер использует несколько моделей? Разве смысл MVC не в том, чтобы сделать модель многократно используемой? В вашем первом сценарии совершенно нормально отправлять электронные письма и манипулировать другими объектами модели из того места, где находится код контроллера "зарегистрировать пользователя".
Что касается вашего второго сценария, почему SearchController
не может использовать ArticleModel
, ImageModel
и VideoModel
? Вполне нормально иметь контроллер без модели. SearchController
не нуждается в классе SearchModel
, он просто использует другие классы моделей.
Я стараюсь не разглагольствовать о MVC в веб-приложениях, но, по сути, IMHO контроллер - это просто высокоуровневый список шагов для выполнения операции. В качестве грубого примера, код контроллера "Регистрация пользователя" должен выполнять каждый из следующих шагов примерно в одной или двух строках кода:
UserModel
из входных данных формыUserModel
в базу данныхТо, как эти шаги будут закодированы, во многом зависит от используемого фреймворка/архитектуры.
Я бы сделал ваши контроллеры простыми.
Во многих отношениях модель позволяет разгрузить большую часть сложности, которая в противном случае замыкала бы код контроллера. Это разделение сложности, которое сделает ваш код более понятным и простым в обслуживании.
Лично я стараюсь, чтобы мои модели напоминали объекты реального мира, а не таблицы или строки баз данных. Это делает его намного проще, если вы заставили вещи говорить в более читаемых терминах. Один объект реального мира может включать в себя 5 или 6 таблиц базы данных... И было бы довольно большой хлопотой поговорить с 5 или 6 моделями, когда все, что вы хотите сделать, это включить переключатель, или сорвать цветок, или нарисовать иконку, или отправить сообщение.