Каково направление потока управления в Чистой архитектуре

Ответ

В Чистой архитектуре (Clean Architecture) поток управления направлен от внешних слоёв к внутренним.

Это означает, что выполнение обычно инициируется внешним событием (например, HTTP-запрос от пользователя) и движется вглубь системы для обработки.

Типичная последовательность:

  1. Presentation / Frameworks (внешний слой): Контроллер получает запрос.
  2. Application / Use Cases (промежуточный слой): Контроллер вызывает соответствующий сервис или сценарий использования (Use Case).
  3. Domain / Entities (внутренний слой): Сервис использует доменные сущности для выполнения основной бизнес-логики.

Пример потока:

# 3. Внутренний слой (Domain)
class User:
    def __init__(self, name: str):
        if not name:
            raise ValueError("Name cannot be empty")
        self.name = name

# 2. Промежуточный слой (Application)
class UserService:
    def __init__(self, user_repository):
        self.user_repository = user_repository

    def create_user(self, name: str) -> User:
        user = User(name) # Выполняется бизнес-логика домена
        self.user_repository.save(user)
        return user

# 1. Внешний слой (Presentation)
class UserController:
    def __init__(self, user_service: UserService):
        self.user_service = user_service

    def handle_request(self, data: dict):
        # Поток начинается здесь
        try:
            user = self.user_service.create_user(data['name'])
            return {"status": "success", "user_id": user.id}
        except ValueError as e:
            return {"status": "error", "message": str(e)}

Таким образом, поток управления инициируется извне (UserController) и делегируется внутренним слоям (UserService, User) для выполнения работы.