Чистые архитектуры на Python - представлены Леонардо Джордани

YOUTUBE · 24.11.2025 03:20

Ключевые темы и таймкоды

Введение в тему

0:06
  • Тема выступления: "Чистые архитектуры в Python".
  • Цель: поделиться взглядами на системный дизайн и привести примеры.
  • Автор: разработчик и блогер, пишет о Python, TDD, объектно-ориентированной криптографии и инфраструктуре.

Определение архитектуры

0:56
  • Архитектура: долговечность, полезность и красота.
  • Витрувий: архитектура как firmitas, utilitas и venustas.
  • Долговечность и полезность кода.

Инженер и архитектор

2:36
  • Витрувий был инженером и архитектором.
  • Слово "инженер" происходит от "двигатель", что означает "изобретательность".
  • Архитектура как искусство и наука проектирования и интеграции компонентов системы.

Важность архитектуры

3:59
  • Архитектура как искусство и наука организации и интеграции компонентов.
  • Примеры: мост Сэмюэля Беккета и операционная система Unix.
  • Долговечность и полезность кода.

Книги по проектированию систем

7:10
  • Рекомендация книг: шаблоны проектирования и корпоративные интеграционные шаблоны.
  • Введение в шаблоны проектирования и их применение.
  • Важность сообщений в объектно-ориентированном программировании.

Чистая архитектура

9:09
  • Чистая архитектура: противоположность нечистой архитектуре.
  • Чистая архитектура: компоненты легко находятся и изолированы.
  • Пример: аппаратные системы с цветовой маркировкой.

Концепция чистой архитектуры

11:05
  • Введение в чистую архитектуру Робертом Мартином.
  • Многоуровневый подход: сущности, варианты использования, шлюзы и внешние системы.
  • Правило: компоненты могут видеть только то, что определено на том же уровне.

Зависимости и интерфейсы

13:19
  • Проблема нечистых систем: циклические зависимости.
  • Чистая архитектура: отсутствие циклических зависимостей.
  • Золотое правило: обращение внутрь через простые структуры, наружу через интерфейсы.

Интерфейсы и внедрение зависимостей

14:30
  • Интерфейсы должны что-то делать и связаны с внедрением зависимостей.
  • В Python нет явного способа указать интерфейсы инфраструктуры.
  • Обсуждение протоколов и абстрактных классов будет позже.

Пример кода на Python

15:27
  • Пример кода на Python без проверки ошибок и других ненужных вещей.
  • Вариант использования - получение списка элементов.
  • Пример использования функции для получения списка элементов.

Сущности и бизнес-логика

16:17
  • Сущности представляют реальные элементы бизнес-логики.
  • Пример сущности с корпоративным кодом.
  • Сущности известны всем компонентам.

Веб-фреймворк и бизнес-логика

16:45
  • Веб-фреймворк используется для обработки HTTP-запросов.
  • Веб-фреймворк не является частью бизнес-логики.
  • Веб-фреймворк должен преобразовывать HTTP-запросы в вызовы функций.

Взаимодействие с веб-фреймворком

19:02
  • Веб-фреймворк взаимодействует с вариантом использования через простые структуры.
  • Пример использования аргументов запроса для простоты.
  • Вариант использования не должен знать о деталях веб-фреймворка.

Репозитории и базы данных

20:05
  • Репозитории могут быть не только базами данных, но и другими источниками данных.
  • Репозитории существуют на уровне внешних систем.
  • Веб-фреймворк создает интерфейс базы данных для внедрения зависимостей.

Интерфейс базы данных

23:29
  • Веб-фреймворк отправляет экземпляр репозитория в сценарий использования.
  • Интерфейс базы данных предоставляет методы для работы с различными базами данных.
  • Пример использования интерфейса базы данных для извлечения данных.

Преобразование данных

25:16
  • Интерфейс базы данных преобразует данные из базы данных в сущности.
  • Сущности отправляются обратно в вариант использования.
  • Веб-фреймворк преобразует сущности в JSON для внешнего использования.

Золотое правило

28:15
  • Обращайтесь внутрь с помощью простых структур, а наружу - с помощью интерфейсов.
  • Пример двух разных реализаций одного варианта использования.
  • Использование второго варианта для лучшего разделения задач.

Введение в чистую архитектуру

28:48
  • Чистая архитектура позволяет отделить бизнес-логику от деталей реализации.
  • Пример использования с репозиторием postgres не должен изменяться, так как это меняет бизнес-логику.
  • Внедрение зависимостей позволяет передавать экземпляры внешних компонентов, таких как веб-фреймворк.

Преимущества чистой архитектуры

30:05
  • Чистая архитектура позволяет легко тестировать бизнес-логику изолированно.
  • Возможность тестирования веб-фреймворка и интерфейса базы данных без необходимости использования реальных баз данных.
  • Тестирование базы данных требует интеграционных тестов, но это не входит в сферу разработки программного обеспечения.

Кастомизация и интерфейсы

33:00
  • Чистая архитектура позволяет настраивать варианты использования для разных баз данных.
  • Веб-фреймворк является лишь одним из возможных интерфейсов, и результаты могут быть представлены через различные протоколы.
  • Важно вызывать сценарий использования и преобразовывать выходные данные для интерфейса.

Сравнение с архитектурой Django

34:55
  • Django имеет модели, представления и ORM, что связывает бизнес-логику с базой данных.
  • В чистой архитектуре база данных является внешней системой, что позволяет тестировать без реальной базы данных.
  • Django требует использования реляционных баз данных, что ограничивает его применение с нереляционными базами данных.

Рекомендации по миграции

38:33
  • Не стоит сразу переделывать всю систему в соответствии с чистой архитектурой.
  • Миграция должна быть постепенной, чтобы избежать ошибок, как это произошло с Netscape.
  • Используйте балансировку нагрузки для перенаправления запросов в другую систему, если что-то не работает.

Заключение

39:54
  • Выбор между чистой архитектурой и другими подходами зависит от обстоятельств и требований.
  • Важно изучать требования и понимать, почему выбранное решение является правильным.
  • Автор рекомендует книгу "Чистые архитектуры в Python" для более глубокого изучения этих концепций.

Введение и примеры баз данных

41:59
  • Автор использовал PostgreSQL и MongoDB для демонстрации возможностей разных баз данных.
  • Книга и другие материалы доступны бесплатно при подписке на Twitter и Lipub.
  • Автор надеется, что информация была полезной.

Вопросы и ответы

42:50
  • Ведущий предлагает задавать вопросы, если они есть.
  • Вопрос о дублировании данных в многоуровневой архитектуре.
  • Обсуждение преимуществ и недостатков чистой архитектуры.

Дублирование данных

43:57
  • Дублирование данных может быть проблемой, но это не всегда так.
  • Пример с моделью и таблицей в базе данных.
  • Разделение бизнес-логики и данных для удобства и производительности.

Красота архитектуры

46:10
  • Вопрос о красоте архитектуры и её субъективности.
  • Автор делится личным опытом и ощущениями от работы над проектами.
  • Важность аккуратности и понятности структуры для удобства работы.