Interactor¶
Интерактор - реализация сценария взаимодействия пользователя с системой. Еще их называют Use Case. Термин интерактор пришел из книги Clean Architecture. В нашем приложении слой, содержащий интеракторы и вспомогательные неймспейсы, будет называться use-cases.
Мы разрабатываем веб-приложение, поэтому взаимодействие пользователя с системой стоится по модели запрос-ответ. Приложения с интерфейсом командной строки или десктопные приложения строятся по этой же модели.
Напомню список сценариев, которые нам нужно реализовать:
- регистрация пользователя
- вход в систему
- выход из системы
- создание поста
- редактирование поста
- отображение поста
- отображение списка всех постов
Интерактор представляет собой набор функций. Как правило, это 3 функции.
authorize - заранее узнать, разрешена ли эта операция или почему запрещена. В случае регистрации пользователя здесь будет проверка того, что пользователь не зашел в систему. При редактировании поста нужно проверить, что пользователь вошел в систему и является автором поста.
initial-data - получить начальные данные формы.
Мы должны на основе наших данных сформировать представление, удобное для редактирования пользователем.
С помощью функции process
мы обработаем правки пользователя.
В случае редактирования поста в форму передаются только разрешенные атрибуты. В зависимости от уровня доступа пользователь может не увидеть некоторые атрибуты.
При регистрации можно определить страну, язык, часовой пояс и предзаполнить форму.
process - обработать запрос пользователя.
Не всегда интерактор содержит 3 эти функции, например для отображения списка постов
нужен только process
.
Уже сейчас понятно, что приложение будет хранить пользователей и посты в базе данных, и использовать сессию. Пока мы не знаем детали их реализации и, аналогично предыдущему разделу, спрячем их за абстракциями. Прежде чем переходить к коду интерактора разберемся с ними.