Ответ
Interactor (Сценарий использования) — это компонент в архитектурах типа Clean Architecture или DDD, который инкапсулирует конкретную бизнес-правило или операцию. Его задача — оркестрировать поток данных между репозиториями (источниками данных) и презентационным слоем, выполняя чистую бизнес-логику.
Ключевые принципы:
- Отделение логики: Interactor не знает о UI (Widgets) или конкретных источниках данных (база данных, API). Он работает с абстракциями (репозиториями).
- Одна ответственность: Каждый интерактор отвечает за одну бизнес-операцию (например, «аутентификация пользователя», «получение списка новостей»).
Пример на Dart (используя пакет flutter_bloc):
// Абстракция репозитория
abstract class AuthRepository {
Future<User> login(String email, String password);
}
// Interactor (часто реализуется как UseCase)
class LoginUseCase {
final AuthRepository _authRepository;
LoginUseCase(this._authRepository);
Future<Either<Failure, User>> execute(LoginParams params) async {
// Валидация параметров (бизнес-правило)
if (!params.isValid) {
return Left(ValidationFailure());
}
// Вызов репозитория и обработка результата
try {
final user = await _authRepository.login(params.email, params.password);
return Right(user);
} on SocketException {
return Left(NetworkFailure());
} on ApiException catch (e) {
return Left(ServerFailure(message: e.message));
}
}
}
// Параметры для инкапсуляции входных данных
class LoginParams {
final String email;
final String password;
LoginParams(this.email, this.password);
bool get isValid => email.isNotEmpty && password.length >= 6;
}
Преимущества: Такой подход делает бизнес-логику независимой, легко тестируемой (можно мокать репозиторий) и переиспользуемой.