Академический Документы
Профессиональный Документы
Культура Документы
Алексей Гром
Что такое Service Object и для чего он нужен?
class GoodService
def initialize(param1, param2, param3)
@param1 = param1
@param2 = param2
@param3 = param3
end
def call
value = inner_method1
inner_method2(value)
end
private
def inner_method1
deep_method1
end
def inner_method2(value)
deep_method2(value)
end
end
Service Object должен быть простым
class DeleteUser
def initialize(user_id:)
@user_id = user_id
end
def call
# …
end
private
attr_reader :user_id
def user
@user ||= User.find(user_id)
end
end
Делайте аргументы метода Call проще
ServiceObject.new(user,dependency).call(input)
Надо быть уверенным что call будет понятен всем
class DeleteUser
# …
def call
delete_user_comments
delete_user && send_user_deletion_notification
end
# …
end
Какие должны быть возвращаемые значения
Service Object?
1. Код результата
2. False в случае не корректной работы service или валидных
данных в случае успеха
3. Объект результата, включающий в себя всё вышеперечисленное.
Чего не надо делать с Service Object
Aliaksei Hrom
Skype: aliaksei.hrom
E-mail: a.hrom@andersenlab.com