Мне нравится шаблон в принципе, и он действительно очистил приложения, которые я создаю. Есть пара замечательных жемчужин, которые я обычно использую для выполнения работы и поддержания чистоты контроллеров.
Я использую мутации gem и simple_command . Эти два вместе дают вам хороший (почти полностью) непротиворечивый API. В частности, гем mutations
- это то, что я использую для переваривания и разрешения входных данных JSON из параметров, которые затем могут обрабатывать процессы для меня.
Это хороший шаблон в том смысле, что он очень хорошо инкапсулирует логику дискретной функциональности. Например, если у вас есть мутация RegisterUser, вы можете использовать ее в контроллере или использовать ее для переваривания целого списка объектов и т. Д. Вы даже можете использовать опцию построителя для атрибутов для обработки глубоко вложенного json.
Я бы порекомендовал проверить это.
https://github.com/cypriss/mutations
В тех случаях, когда я не обрабатываю JSON из API и хочу создать дискретную инкапсулированную функциональность, я обычно использую simple_command
https://github.com/nebulab/simple_command. Этот подход также хорош, поскольку он позволяет использовать одни и те же компоненты из любого контекст. Например, команда с именем GetLatestTweets.call()
может использоваться с контроллера одинаково хорошо, как с REPL.
Обе эти библиотеки предоставляют вам объект результата, который затем можно обработать соответствующим образом
def create
outcome = NewClientMutation.run(params.require(:resource).permit!)
if outcome.success?
render json: outcome.result, status: :created
else
render json: {resource: outcome.result, errors: outcome.errors}, status: :unprocessable_entity
end
end
В моем конкретном случае я использую «разрешение!» поскольку библиотека мутаций игнорирует любые параметры, которые не указаны явно, это означает, что сильные параметры не нужны, если вы используете эту библиотеку, поскольку она также фильтрует параметры.