Ответ
Presenter и Interactor — это два разных слоя в архитектурах VIPER или Clean, каждый со своей зоной ответственности.
Interactor (Слой бизнес-логики)
- Что делает: Содержит чистую бизнес-логику приложения.
- Ответственность: Получение и обработка данных из репозиториев (API, базы данных), выполнение бизнес-правил.
- Не знает о: Существовании UI (View). Работает с простыми моделями данных (Entities).
Presenter (Слой логики представления)
- Что делает: Подготавливает данные для отображения на UI.
- Ответственность: Получает сырые данные от Interactor, форматирует их (например, в строки дат), преобразует в удобные для View модели (View Models). Управляет состоянием View.
- Не знает о: Конкретной реализации UI-элементов (UIKit/SwiftUI).
Ключевое отличие: Interactor работает с бизнес-логикой и данными, а Presenter — с логикой представления и подготовкой данных для UI.
Пример на Swift:
// Interactor работает с бизнес-моделями (Entity)
protocol UserInteractorProtocol {
func fetchUsers() -> [UserEntity]
}
// Presenter преобразует Entity в View-модели
protocol UserPresenterProtocol {
func prepareUserList() -> [UserViewModel]
}
class UserPresenter: UserPresenterProtocol {
private let interactor: UserInteractorProtocol
func prepareUserList() -> [UserViewModel] {
let users = interactor.fetchUsers() // Получаем Entity
// Преобразуем в удобный для View формат
return users.map { UserViewModel(name: $0.fullName, age: "($0.age) лет") }
}
}