Facebook Pixel
Searching...
Русский
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Architecture Patterns with Python

Architecture Patterns with Python

Enabling Test-Driven Development, Domain-Driven Design, and Event-Driven Microservices
автор Harry Percival 2020 301 страниц
4.42
100+ оценки
Слушать

ключевых вывода

1. Моделирование домена — основа чистой и поддерживаемой архитектуры программного обеспечения

Модель домена — это не модель данных; мы пытаемся отразить, как работает бизнес: рабочие процессы, правила изменения состояния, обмен сообщениями; как система реагирует на внешние события и ввод пользователя.

Domain-Driven Design (DDD) подчеркивает создание богатой модели домена, отражающей бизнес-логику и процессы. Этот подход отделяет основные бизнес-правила от инфраструктурных вопросов, делая систему более гибкой и легкой в обслуживании. Ключевые концепции включают:

  • Сущности: Объекты с уникальной идентичностью, сохраняющейся во времени
  • Объекты-значения: Неизменяемые объекты, определяемые их атрибутами
  • Агрегаты: Кластеры связанных объектов, рассматриваемые как единое целое для изменения данных
  • События домена: Представляют значительные события в домене

Сосредоточившись на модели домена, разработчики могут создать общий язык со стейкхолдерами, улучшая коммуникацию и обеспечивая точное представление бизнес-требований в программном обеспечении.

2. Паттерны Репозиторий и Единица Работы отделяют домен от инфраструктуры

Паттерн Репозиторий — это абстракция над постоянным хранилищем, позволяющая отделить слой модели от слоя данных.

Паттерн Репозиторий предоставляет интерфейс, похожий на коллекцию, для доступа к объектам домена, скрывая детали доступа к данным. Паттерн Единица Работы поддерживает список объектов, затронутых бизнес-транзакцией, и координирует запись изменений. Вместе они предлагают несколько преимуществ:

  • Разделение ответственности: Логика домена остается чистой, свободной от инфраструктурных деталей
  • Тестируемость: Легче создавать моки или фейки для модульного тестирования
  • Гибкость: Возможность переключаться между различными механизмами хранения без влияния на домен

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

3. Паттерн Сервисного Слоя организует сценарии использования и определяет границы системы

Паттерн Сервисного Слоя — это абстракция над логикой домена, определяющая сценарии использования приложения и то, что они требуют от модели домена.

Сервисный Слой действует как фасад для модели домена, инкапсулируя специфичную для приложения логику и организуя выполнение сценариев использования. Он предоставляет несколько преимуществ:

  • Четкое API: Определяет операции, которые может выполнять приложение
  • Разделение ответственности: Сохраняет логику домена отдельно от логики приложения
  • Тестируемость: Позволяет проводить высокоуровневые модульные тесты без необходимости в интеграционных тестах

Реализуя Сервисный Слой, разработчики могут создать четкую границу между внешними интерфейсами приложения (например, API, CLI) и его внутренней логикой домена, делая систему более понятной и легкой в обслуживании.

4. Событийно-ориентированная архитектура обеспечивает слабую связанность и масштабируемость

События помогают нам поддерживать порядок, отделяя основные сценарии использования от второстепенных. Мы также используем события для общения между агрегатами, чтобы избежать длительных транзакций, блокирующих несколько таблиц.

Событийно-ориентированная архитектура использует события для запуска и общения между слабо связанными сервисами. Этот подход предлагает несколько преимуществ:

  • Слабая связанность: Сервисы могут развиваться независимо
  • Масштабируемость: Легче масштабировать отдельные компоненты
  • Гибкость: Упрощает добавление новых функций или изменение бизнес-процессов

Ключевые компоненты событийно-ориентированных систем включают:

  • События домена: Представляют значительные изменения в домене
  • Шина сообщений: Направляет события к соответствующим обработчикам
  • Обработчики событий: Реагируют на конкретные события и выполняют действия

Эта архитектура позволяет системам обрабатывать сложные рабочие процессы и интегрировать несколько сервисов, сохраняя при этом модульность и масштабируемость.

5. Разделение ответственности команд и запросов (CQRS) оптимизирует операции чтения и записи

Чтение и запись различны, поэтому их следует рассматривать по-разному (или разделять их ответственность, если хотите).

CQRS разделяет модели чтения и записи приложения, позволяя каждой оптимизироваться независимо. Этот паттерн особенно полезен для сложных доменов или высокопроизводительных систем. Преимущества включают:

  • Оптимизация производительности: Модели чтения и записи могут масштабироваться отдельно
  • Упрощенные модели: Каждая модель сосредоточена на одной ответственности
  • Гибкость: Позволяет использовать разные хранилища данных для чтения и записи

Стратегии реализации:

  • Разделение моделей чтения и записи
  • Использование разных баз данных для чтения и записи
  • Реализация конечной согласованности между сторонами чтения и записи

Хотя CQRS добавляет сложности, он может значительно улучшить производительность и масштабируемость в подходящих сценариях.

6. Внедрение зависимостей способствует гибкости и тестируемости

Внедрение зависимостей (DI) — это техника, при которой зависимости объекта предоставляются ему, а не создаются или управляются самим объектом.

Внедрение зависимостей — это паттерн проектирования, который улучшает модульность, тестируемость и гибкость кода. Ключевые преимущества включают:

  • Слабая связанность: Объектам не нужно знать, как создаются их зависимости
  • Тестируемость: Легко заменять реальные реализации тестовыми двойниками
  • Гибкость: Упрощает изменение реализаций без модификации зависимого кода

Реализация DI:

  • Внедрение через конструктор: Зависимости предоставляются через конструктор
  • Внедрение через свойства: Зависимости устанавливаются через публичные свойства
  • Внедрение через методы: Зависимости предоставляются в качестве параметров метода

Используя DI, разработчики могут создавать более модульный и поддерживаемый код, особенно в сочетании с другими паттернами, такими как Репозиторий и Единица Работы.

7. Валидация на границе системы обеспечивает целостность данных и упрощает домен

Валидируйте на границе, когда это возможно. Проверка обязательных полей и допустимых диапазонов чисел скучна, и мы хотим держать это вне нашего чистого кода. Обработчики всегда должны получать только валидные сообщения.

Валидация на границе включает проверку входных данных на точках входа в систему до того, как они достигнут логики домена. Этот подход предлагает несколько преимуществ:

  • Чистая модель домена: Логика домена сосредоточена на бизнес-правилах, а не на проверке входных данных
  • Улучшенная безопасность: Раннее обнаружение некорректных или вредоносных входных данных
  • Лучший пользовательский опыт: Предоставление немедленной обратной связи о недопустимых входных данных

Типы валидации:

  • Синтаксическая: Обеспечивает правильную структуру и типы данных
  • Семантическая: Проверяет значение и согласованность данных
  • Прагматическая: Применяет бизнес-правила в контексте операции

Реализуя тщательную валидацию на границе системы, разработчики могут создавать более надежные и поддерживаемые приложения, сохраняя модель домена сосредоточенной на основных бизнес-правилах.

Последнее обновление:

Отзывы

4.42 из 5
Средняя оценка на основе 100+ оценки с Goodreads и Amazon.

Архитектурные паттерны с Python получает высокую оценку за практический подход к проектированию, ориентированному на домен, и программной архитектуре. Читатели ценят ясные объяснения, примеры из реальной жизни и сбалансированную перспективу на различные паттерны. Книга отмечена за акцент на разработке через тестирование и увлекательный стиль написания. Многие находят её полезной как для новичков, так и для опытных разработчиков, предлагая ценные идеи по созданию масштабируемых и поддерживаемых приложений на Python. Некоторые читатели отмечают, что подход может быть чрезмерно сложным для определённых ситуаций, но в целом книга настоятельно рекомендуется всем, кто хочет улучшить свои навыки проектирования программного обеспечения.

Об авторе

Гарри Персивал — разработчик программного обеспечения и автор, известный своим мастерством в области разработки через тестирование (TDD) и проектирования, ориентированного на домен (DDD). Он завоевал признание благодаря практическому подходу к обучению сложным концепциям разработки программного обеспечения. Стиль письма Персивала отмечен увлекательностью, ясностью и доступностью для разработчиков с различным уровнем подготовки. Он является автором нескольких технических книг, включая «Разработка через тестирование на Python» и «Архитектурные паттерны на Python». Работа Персивала сосредоточена на помощи разработчикам в создании надежных и поддерживаемых программных систем с использованием лучших практик и современных проектных паттернов. Его вклад в сообщество Python сделал его уважаемой фигурой в области программной инженерии.

0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Ratings: Rate books & see your ratings
Unlock Unlimited Listening
🎧 Listen while you drive, walk, run errands, or do other activities
2.8x more books Listening Reading
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Jan 25,
cancel anytime before.
Compare Features Free Pro
Read full text summaries
Summaries are free to read for everyone
Listen to summaries
12,000+ hours of audio
Unlimited Bookmarks
Free users are limited to 10
Unlimited History
Free users are limited to 10
What our users say
30,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Settings
Appearance
Black Friday Sale 🎉
$20 off Lifetime Access
$79.99 $59.99
Upgrade Now →