Пример потока данных в Clean Architecture на Go

Предисловие

Clean Architecture (Чистая Архитектура), предложенная Робертом Мартином (Uncle Bob), — это подход к проектированию ПО, который подчеркивает разделение на слои с четкими зависимостями.

Основная идея: сделать систему независимой от фреймворков, UI, баз данных и внешних сервисов. Зависимости направлены “внутрь” — внешние слои зависят от внутренних, но не наоборот.

Ключевые слои Clean Architecture:

Практический пример: Создание пользователя

Сценарий: Пользователь регистрируется, отправляя HTTP POST-запрос на /users с JSON-телом:

{
  "name": "Alice Johnson",
  "email": "alice@example.com"
}

Приложение использует PostgreSQL как БД. Рассмотрим пошаговый поток данных:

image.png

Входящий поток: От запроса к сохранению в БД

1. HTTP запрос → Адаптер (HTTP Handler)

Что происходит: Адаптер получает сырой HTTP запрос и парсит его.

2. Адаптер → Контроллер

Что происходит: Контроллер валидирует данные.

3. Контроллер → UseCase

Что происходит: UseCase применяет бизнес-правила и проверяет уникальность.

4. UseCase → Repository Interface

Что происходит: Абстрактный вызов сохранения.

5. Repository Interface → Driver (PostgreSQL)

Что происходит: Формирование и выполнение SQL-запроса.

6. Database → Успешный ответ

Что происходит: Сохранение в PostgreSQL.


Визуализация полного цикла на диаграмме

📊 Прямые стрелки (сплошные): Входящий поток

Движение данных ОТ клиента К базе данных

📊 Обратные стрелки (пунктирные): Исходящий поток

Движение результата ОТ базы данных К клиенту


Ключевые преимущества архитектуры

  1. Изоляция слоев: Смена БД не затрагивает бизнес-логику
  2. Тестируемость: UseCase можно тестировать с mock-репозиториями
  3. Понятность: Каждый слой имеет четкую ответственность
  4. Гибкость: Легко добавлять новые адаптеры (GraphQL, gRPC)

Заключение

Этот пример показывает, как Clean Architecture делает поток данных предсказуемым и устойчивым. Каждый слой выполняет свою роль, а зависимости направлены правильно.


Revision #2
Created 8 September 2025 08:56:42 by Admin
Updated 8 September 2025 09:06:25 by Admin