Rails - метод в модели или контроллере или где-то еще? - PullRequest
0 голосов
/ 04 декабря 2011

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

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

Является альтернативойсоздать новое действие контроллера для каждой предметной области?

Как еще я могу это организовать?

Ответы [ 2 ]

0 голосов
/ 07 мая 2016

Спор о том, где разместить логику, так же стар, как и сами паттерны. Для MVC я решил спросить себя:

  • Является ли используемая логика существенной для модели?
  • Будет ли модель (сама по себе) функционировать хорошо без логики?
  • Нет ли у модели каких-либо требований к контроллеру?
  • Если бы я повторно использовал модель, хотел бы я взять с собой соответствующую бизнес-логику или она будет мешать?

Мой общий совет: ставьте бизнес-логику как «низко» (низ: дБ, затем модель, затем контроллер, затем представление), насколько это возможно, не нарушая одно из следующих ограничений:

  • Аутентификация и авторизация не относятся к просмотру. Это либо свойство контроллера (обрабатывать такие вещи, как сеансы и общие правила доступа API, и т. Д.), Либо модели (авторизация: кто может получить доступ к какому контенту?)
  • Связанные с UI / display / input-метода вещи не попадают в модель или дБ. Не позволяйте вашей модели / базе данных решать, следует ли и как отображать HTML, XML или JSON.
  • Согласованность и целостность данных не в контроллере / представлении. В идеале ваша модель данных принимает только действительные данные, использует безопасность транзакций и сообщает о неудаче или успехе контроллеру. В идеале согласованность обрабатывается на уровне дБ.
  • Модель должна использоваться повторно с другими контроллерами / представлениями в новом проекте (подумайте о переключении на другой веб-API). Слишком сильные ограничения могут сделать его непригодным для использования в новых ситуациях.
  • может быть больше ...

И вообще: если сомневаетесь, вставьте в контроллер. ;)

0 голосов
/ 04 декабря 2011

http://www.enode.com/x/markup/tutorial/mvc.html

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

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

Это должно быть полезно: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

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

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