После прочтения некоторых шаблонов проектирования я застрял со словом SRP (принцип единой ответственности), и я начал смотреть на свой контроллер. Я нашел один пример, где он может нарушать принцип единой ответственности. Правильно ли я говорю, что действие на создание должно отвечать только за то, чтобы убедиться, что объект создан или нет? Я изначально поставил логику создания роли в том же самом действии. (т. е. после создания объекта, добавления и «владельца» роли для пользователя, создавшего объект).Как отделить заботу о создании ролей в моих контроллерах
def create
@car_new_form = CarNewForm.new(current_user)
if car_id = @car_new_form.submit(params[:car_new_form])
current_user.add_role :owner, Car.find(car_id)
redirect_to edit_car_path(car_id)
else
render 'new'
end
end
Я попытался переместить его в объект формы car_new_form
. Однако мне показалось, что я только перемещаю беспорядок в другом месте, не разделяя беспокойство.
Как управлять управлением ролью add_role
, учитывая разделение проблем?
Я прочитал немного об извлечении объектов обслуживания в рубиновых моделях конструкций с помощью кода-климата. вы могли бы написать пример кода? благодаря! –
@ChrisYeung: Добавлен образец сервиса. Это можно вызвать из вашего контроллера или из «NewCarForm». Возможно, имеет смысл включить это в «NewCarForm» в зависимости от того, как вы определяете обязанности своей формы. – fylooi
благодарим за код! –