Начало работы
Соглашения
- Все сервисы являются подклассами
Servactory::Base
и располагаются в директорииapp/services
. Общепринятой практикой является создание и наследование отApplicationService::Base
, который является подклассомServactory::Base
. - Называйте сервисы по тому что они делают, а не по тому что они принимают. Используйте глаголы в именах. Например, назовите сервис
UsersService::Create
вместоUsersService::Creation
.
Поддержка версий
Ruby/Rails | 7.2 | 7.1 | 7.0 | 6.1 | 6.0 | 5.2 | 5.1 | 5.0 |
---|---|---|---|---|---|---|---|---|
3.3 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
3.2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
3.1 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
3.0 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
Установка
Добавьте это в файл Gemfile
:
ruby
gem "servactory"
Затем выполните:
shell
bundle install
Подготовка
Для начала рекомендуется подготовить базовый класс для дальнейшего наследования.
Автоматически Начиная с 2.5.0
Для быстрой подготовки среды для работы вы можете воспользоваться rake-задачей:
shell
bundle exec rails g servactory:install
Это создаст все необходимые файлы.
Вручную
ApplicationService::Exceptions
ruby
module ApplicationService
module Exceptions
class Input < Servactory::Exceptions::Input; end
class Output < Servactory::Exceptions::Output; end
class Internal < Servactory::Exceptions::Internal; end
class Failure < Servactory::Exceptions::Failure; end
end
end
ApplicationService::Result Начиная с 2.5.0
ruby
module ApplicationService
class Result < Servactory::Result; end
end
ApplicationService::Base
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
input_exception_class ApplicationService::Exceptions::Input
internal_exception_class ApplicationService::Exceptions::Internal
output_exception_class ApplicationService::Exceptions::Output
failure_class ApplicationService::Exceptions::Failure
result_class ApplicationService::Result
end
end
end
Первый сервис
Теперь вы можете создать свой первый сервис. Для этого можно воспользоваться rake-задачей:
shell
bundle exec rails g servactory:service users_service/create first_name middle_name last_name
Также вы можете сразу подготовить спек файл для тестирования сервиса:
shell
bundle exec rails g servactory:rspec users_service/create first_name middle_name last_name