Какие слои чистой архитектуры (Clean Architecture) будут затронуты при добавлении поддержки WebSocket?

Ответ

При добавлении поддержки WebSocket в приложении, построенном по принципам чистой архитектуры, изменения коснутся в основном внешних слоев, в то время как ядро бизнес-логики останется неизменным. Главное правило — зависимости направлены внутрь.

Будут затронуты следующие слои:

  1. Frameworks & Drivers (Инфраструктурный слой):

    • Что здесь делается: Реализуется конкретный WebSocket-сервер с использованием внешней библиотеки (например, gorilla/websocket). Этот код отвечает за установку соединений, чтение и запись байтов, обработку ошибок подключения.
    • Пример: Создается структура, которая реализует интерфейс, определенный в слое Use Cases.
  2. Interface Adapters (Слой адаптеров):

    • Что здесь делается: Добавляется новый Controller или Handler, который принимает входящие WebSocket-соединения. Он преобразует низкоуровневые сообщения WebSocket в вызовы методов из слоя Use Cases. Также здесь может быть Presenter, который форматирует данные от Use Case для отправки клиенту.
  3. Use Cases (Слой сценариев использования):

    • Что здесь делается: Этот слой определяет абстракции (интерфейсы), необходимые для его работы. Например, если use case должен рассылать уведомления, он определит интерфейс Notifier.
      // Этот интерфейс живет в слое Use Cases
      type Notifier interface {
          Notify(userID string, message []byte) error
      }
    • Сам use case будет использовать этот интерфейс, не зная ничего о WebSocket. Реализация этого интерфейса будет находиться в инфраструктурном слое.
    • Могут быть добавлены новые use cases (например, HandleRealTimeUpdatesUseCase).
  4. Entities (Слой сущностей):

    • Этот слой не должен быть затронут. Бизнес-объекты и правила остаются независимыми от способа доставки данных.

Итог:

Основная работа происходит в инфраструктурном слое (реализация) и слое адаптеров (связывание). Слой Use Cases может потребовать добавления новых сценариев и определения интерфейсов, но его существующая логика не меняется. Доменный слой (Entities) остается нетронутым. Это и есть главное преимущество чистой архитектуры — изоляция бизнес-логики от деталей реализации.