Ответ
При добавлении поддержки WebSocket в приложении, построенном по принципам чистой архитектуры, изменения коснутся в основном внешних слоев, в то время как ядро бизнес-логики останется неизменным. Главное правило — зависимости направлены внутрь.
Будут затронуты следующие слои:
-
Frameworks & Drivers (Инфраструктурный слой):
- Что здесь делается: Реализуется конкретный WebSocket-сервер с использованием внешней библиотеки (например,
gorilla/websocket). Этот код отвечает за установку соединений, чтение и запись байтов, обработку ошибок подключения. - Пример: Создается структура, которая реализует интерфейс, определенный в слое Use Cases.
- Что здесь делается: Реализуется конкретный WebSocket-сервер с использованием внешней библиотеки (например,
-
Interface Adapters (Слой адаптеров):
- Что здесь делается: Добавляется новый
ControllerилиHandler, который принимает входящие WebSocket-соединения. Он преобразует низкоуровневые сообщения WebSocket в вызовы методов из слоя Use Cases. Также здесь может бытьPresenter, который форматирует данные от Use Case для отправки клиенту.
- Что здесь делается: Добавляется новый
-
Use Cases (Слой сценариев использования):
- Что здесь делается: Этот слой определяет абстракции (интерфейсы), необходимые для его работы. Например, если use case должен рассылать уведомления, он определит интерфейс
Notifier.// Этот интерфейс живет в слое Use Cases type Notifier interface { Notify(userID string, message []byte) error } - Сам use case будет использовать этот интерфейс, не зная ничего о WebSocket. Реализация этого интерфейса будет находиться в инфраструктурном слое.
- Могут быть добавлены новые use cases (например,
HandleRealTimeUpdatesUseCase).
- Что здесь делается: Этот слой определяет абстракции (интерфейсы), необходимые для его работы. Например, если use case должен рассылать уведомления, он определит интерфейс
-
Entities (Слой сущностей):
- Этот слой не должен быть затронут. Бизнес-объекты и правила остаются независимыми от способа доставки данных.
Итог:
Основная работа происходит в инфраструктурном слое (реализация) и слое адаптеров (связывание). Слой Use Cases может потребовать добавления новых сценариев и определения интерфейсов, но его существующая логика не меняется. Доменный слой (Entities) остается нетронутым. Это и есть главное преимущество чистой архитектуры — изоляция бизнес-логики от деталей реализации.