Rails: когда модель? Когда либ? - PullRequest
7 голосов
/ 02 ноября 2009

Я делаю небольшой модуль отправки сообщений. Он будет обрабатывать сообщения в очереди из запроса, который будет получен второстепенным работником для отправки электронной почты / SMS (или соответствующего журнала для тестирования).

Вопрос: это модель (в / app / models) или библиотека (в /lib).

Я хотел бы, чтобы в этом была какая-то религия.

Теория A: (Моя текущая теория) Если вы не создаете подклассы ActionMailer :: Base или ActiveRecord :: Base и т. Д., Ваш код должен перейти в lib.

Теория Б: (Теория, к которой я склоняюсь) Вещи, которые зависят от приложения, должны быть в модели. Все, что может быть общего назначения, должно быть в lib.

Теория C: в «моделях» должны быть только «модели данных». Однако подклассы ActionMailer нарушают это правило.

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

Мысли

Ответы [ 3 ]

5 голосов
/ 02 ноября 2009

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

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

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

2 голосов
/ 02 ноября 2009

Вы, вероятно, должны думать больше с точки зрения основного бизнеса здесь. Модели, как следует из их названия, здесь представляют (моделируют) какую-то реальную систему или процесс. Итак, практическое правило должно быть таким: играет ли эта сущность какую-либо роль в системе, которую я пытаюсь выразить в своем приложении? Если ответ положительный, то сущность является хорошим кандидатом на роль модели. Однако было бы неплохо реализовать основные функции модуля обмена сообщениями в отдельной библиотеке для последующего повторного использования и просто включить ее в модель.

1 голос
/ 03 ноября 2009

Мне нравится теория «модели данных», и я стараюсь придерживаться ее, когда могу, но я думаю, что у Бэнси и Милана правильная идея. Если у вас есть представления и контроллеры, связанные с ним, то это должно быть с моделями. Если вы ссылаетесь только на функциональность из другого класса, поместите его в lib.

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