Начиная
Соглашения
- Все сервисы являются подклассами
Servactory::Base
и располагаются в директорииapp/services
. Общепринятой практикой является создание и наследование отApplicationService::Base
, который является подклассомServactory::Base
. - Называйте сервисы по тому что они делают, а не по тому что они принимают. Используйте глаголы в именах. Например, назовите сервис
UsersService::Create
вместоUsersService::Creation
.
Установка
Добавьте это в файл Gemfile
:
gem "servactory"
Затем выполните:
bundle install
Подготовка
Для начала рекомендуется подготовить базовый класс для дальнейшего наследования.
ApplicationService::Errors
app/services/application_service/errors.rb
module ApplicationService
module Errors
class InputError < Servactory::Errors::InputError; end
class OutputError < Servactory::Errors::OutputError; end
class InternalError < Servactory::Errors::InternalError; end
class Failure < Servactory::Errors::Failure; end
end
end
ApplicationService::Base
app/services/application_service/base.rb
module ApplicationService
class Base < Servactory::Base
configuration do
input_error_class ApplicationService::Errors::InputError
output_error_class ApplicationService::Errors::OutputError
internal_error_class ApplicationService::Errors::InternalError
failure_class ApplicationService::Errors::Failure
end
end
end