Interactor

Интерактор - реализация сценария взаимодействия пользователя с системой. Еще их называют Use Case. Термин интерактор пришел из книги Clean Architecture. В нашем приложении слой, содержащий интеракторы и вспомогательные неймспейсы, будет называться use-cases.

Мы разрабатываем веб-приложение, поэтому взаимодействие пользователя с системой стоится по модели запрос-ответ. Приложения с интерфейсом командной строки или десктопные приложения строятся по этой же модели.

Напомню список сценариев, которые нам нужно реализовать:

  • регистрация пользователя
  • вход в систему
  • выход из системы
  • создание поста
  • редактирование поста
  • отображение поста
  • отображение списка всех постов

Интерактор представляет собой набор функций. Как правило, это 3 функции.

authorize - заранее узнать, разрешена ли эта операция или почему запрещена. В случае регистрации пользователя здесь будет проверка того, что пользователь не зашел в систему. При редактировании поста нужно проверить, что пользователь вошел в систему и является автором поста.

initial-data - получить начальные данные формы. Мы должны на основе наших данных сформировать представление, удобное для редактирования пользователем. С помощью функции process мы обработаем правки пользователя.

В случае редактирования поста в форму передаются только разрешенные атрибуты. В зависимости от уровня доступа пользователь может не увидеть некоторые атрибуты.

При регистрации можно определить страну, язык, часовой пояс и предзаполнить форму.

process - обработать запрос пользователя.

Не всегда интерактор содержит 3 эти функции, например для отображения списка постов нужен только process.

Уже сейчас понятно, что приложение будет хранить пользователей и посты в базе данных, и использовать сессию. Пока мы не знаем детали их реализации и, аналогично предыдущему разделу, спрячем их за абстракциями. Прежде чем переходить к коду интерактора разберемся с ними.