Я знаю, что на подобные вопросы уже давали ответы, например:
- Куда должна идти логика
- где выполнять определенные задачи и т. Д.
Но у меня есть более конкретный вопрос - как далеко я должен взять эту аксиому: сделай свой контроллер худым, сделай свою модель толстой!
Вот пример:
Например, допустим, у меня есть несколько источников данных для проверки. Хорошим примером будет номер VIN -
Я могу проверить это по источникам данных производителей, источникам данных DMV, а также по моим локальным базам данных - чтобы посмотреть, что у меня есть в записи.
Итак, у меня есть модель под названием Vin и vins_controller. Внутри модели у меня 5 методов:
- check_against_local_db
- check_against_dmv
- check_against_car_maker_1
- check_against_car_maker_2 и т. Д.
В моем контроллере, поддерживающем REST, в действии show - у меня есть простая инструкция case, которая смотрит на параметры [: source] и основанная на указанном источнике - вызовет специальный метод проверки.
Теперь вот вопрос:
Должен ли я оставить логику, которая определяет, какой источник данных вызывать в контроллере, или я должен переместить его в модель, а затем в контроллере просто сделать что-то вроде check_vin (source, vin)?
Должен ли я сделать мой контроллер анорексиком?
EDIT
Я переключаю это на официальный ответ от @ jay-godse (спасибо - в то время это был хороший ответ).
С 2010 года многое изменилось, и этот вопрос по-прежнему получает некоторые взгляды - так что, надеюсь, это укажет некоторым людям правильное направление и поможет им правильно организовать свой код.
Trailblazer gem действительно хорошо решает проблемы, поднятые в вопросе.