рекомендации по размещению классов в приложениях Rails, которые никуда не вписываются

Мне интересно, есть ли рекомендации по размещению нестандартных файлов Ruby в приложениях Rails, которые не помещаются ни в одну из директорий по умолчанию (controllers/models и т.д.).

Я говорю о классах, которые используются контроллерами / моделями и т. Д., Но не являются подклассами ни одного из базовых классов Rails. Классы, которые включают функциональность, извлеченную из моделей, чтобы сделать их менее жирными. Некоторые из них выглядят как модели, но не являются моделями AR, некоторые из них больше похожи на «услуги», некоторые - что-то среднее или что-то еще.

Несколько случайных примеров:

классы "Strategy", которые обрабатывают аутентификацию с помощью пароля, через Facebook и т. д.Объекты "XParams", которые инкапсулируют параметры, или объекты "XCreator", которые обрабатывают обработку параметров, чтобы выполнить какое-то сложное действие, которое приводит к созданию некоторых моделей AR в концеклассы, которые делают запросы к внешним API или инкапсулируют эти запросы и ответыподдельные модели, которые могут быть заменены реальной моделью AR (например, гость)Resque рабочие местаклассы, которые хранят и читают информацию из Redisклассы, которые выполняют некоторые конкретные действия, такие как обработка данных, генерация отчетов и т. д. и вызываются из заданий Resque или задач rake

У меня их довольно много, некоторые из них добавлены вlib который заканчивается как куча случайных классов и модулей, некоторые пробираются вapp/models, Я бы хотел как-то это организовать, но не знаю с чего начать.

Должны ли только модели AR входить вapp/models? Или это также нормально, чтобы положить туда какие-либо модели доменов или помощников? Как вы решаете, является ли что-то моделью?

Должно ли все, что не вписывается вapp войти вlib? Или, может быть, я должен добавить несколько новых пользовательских подкаталогов вapp? Какие подкаталоги и как мне разделить пользовательские классы?

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

Ответы на вопрос(5)

Ваш ответ на вопрос