Введение в тему 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 Вопрос о красоте архитектуры и её субъективности. Автор делится личным опытом и ощущениями от работы над проектами. Важность аккуратности и понятности структуры для удобства работы.