Начать бесплатный период
Searching...
SoBrief
Русский
EnglishEnglish
EspañolSpanish
简体中文Chinese
繁體中文Chinese (Traditional)
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
Паттерны архитектуры на Python

Паттерны архитектуры на Python

разработка через тестирование, предметно-ориентированное проектирование и событийно-управляемые микросервисы
Гарри Персиваль 2020 280 стр.
4.40
497 оценок
Слушать
Попробуйте полный доступ на 3 дня
Откройте прослушивание и многое другое!
Продолжить

Ключевые идеи

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Обновлено:

Report Issue

Обзор отзывов

4.40 из 5
На основе 497 оценок с Goodreads и Amazon.

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

Your rating:
4.63
415 оценок
Want to read the full book?

Частые вопросы

What's Architecture Patterns with Python about?

  • Focus on Software Architecture: The book delves into architectural patterns tailored for Python, emphasizing Test-Driven Development (TDD), Domain-Driven Design (DDD), and event-driven microservices.
  • Real-World Application: It uses practical examples from the authors' experiences at MADE.com to illustrate managing complexity in software systems.
  • Framework Agnostic: While discussing frameworks like Flask and SQLAlchemy, the principles are applicable across various technologies and languages.

Why should I read Architecture Patterns with Python?

  • Improve Software Design: The book offers insights into structuring applications for enhanced testability and maintainability, crucial for long-term software health.
  • Learn from Experts: Authored by experienced software architects Harry Percival and Bob Gregory, it provides practical advice grounded in real-world scenarios.
  • Comprehensive Coverage: It covers a range of architectural patterns, making it valuable for both beginners and experienced developers.

What are the key takeaways of Architecture Patterns with Python?

  • Understanding Architectural Patterns: Readers learn about patterns like Repository, Unit of Work, and Event-Driven Architecture, and their implementation in Python.
  • Emphasis on TDD and DDD: The book highlights the importance of TDD and DDD in managing complexity and ensuring accurate business logic representation.
  • Event-Driven Systems: It discusses building systems that respond to events, allowing for flexible and decoupled architectures.

What are the best quotes from Architecture Patterns with Python and what do they mean?

  • "Events are simple dataclasses...": This quote emphasizes the role of events in capturing and communicating changes within an event-driven architecture.
  • "We use events as our data structure...": It illustrates how events serve as both input data and a means to trigger internal processes, enhancing modularity.
  • "Our ongoing objective with these architectural patterns...": This underscores managing complexity in software design, ensuring applications remain manageable as they grow.

What is the Repository pattern as described in Architecture Patterns with Python?

  • Abstraction Over Data Storage: The Repository pattern abstracts data access, keeping the domain model independent of the underlying data storage technology.
  • Simplifies Testing: By using repositories, developers can easily mock data access in tests, leading to faster and more reliable unit tests.
  • Encourages Separation of Concerns: This pattern maintains a clean separation between domain logic and data access logic, making the codebase easier to manage.

How does the Unit of Work pattern work in Architecture Patterns with Python?

  • Atomic Operations: The Unit of Work pattern groups multiple operations into a single transaction, ensuring all changes are committed or rolled back together.
  • Context Manager: Implemented as a context manager in Python, it simplifies the management of database sessions and transactions.
  • Integration with Repositories: It collaborates with repositories to provide a cohesive interface for data access while maintaining transactional integrity.

What is Domain-Driven Design (DDD) and how is it applied in Architecture Patterns with Python?

  • Focus on Business Logic: DDD emphasizes modeling software based on the business domain, ensuring code reflects real-world processes and rules.
  • Ubiquitous Language: The book stresses using a common language between developers and domain experts to avoid misunderstandings and ensure clarity.
  • Aggregates and Consistency Boundaries: DDD introduces aggregates, clusters of related objects treated as a single unit for data changes, maintaining consistency.

What are Domain Events and how are they used in Architecture Patterns with Python?

  • Capturing State Changes: Domain Events represent changes in the system, allowing different application parts to react without tight coupling.
  • Event-Driven Architecture: The book illustrates using events to trigger workflows and actions across system components, promoting a decoupled architecture.
  • Integration with Message Bus: Events are published to a message bus, routing them to handlers, enabling clean separation of concerns and asynchronous processing.

How does Architecture Patterns with Python address testing strategies?

  • Test Pyramid Concept: The authors advocate for a healthy test pyramid, emphasizing a majority of unit tests, fewer integration tests, and minimal end-to-end tests.
  • Service Layer Testing: The book demonstrates testing service layer functions using fakes and mocks, allowing for fast and reliable tests focusing on business logic.
  • Encouraging Refactoring: By structuring tests around the service layer and using events, the book encourages developers to refactor code without fear of breaking functionality.

What are some best practices for implementing architectural patterns in Python according to Architecture Patterns with Python?

  • Start Simple: Begin with simple implementations of patterns and gradually refactor as the system grows in complexity.
  • Use Context Managers: For managing resources like database sessions, context managers are encouraged for their clarity and ease of use.
  • Decouple Components: Keep components loosely coupled, allowing for easier testing and maintenance, and enabling system evolution without significant rewrites.

What is the significance of event-driven architecture in Architecture Patterns with Python?

  • Decoupled Systems: Event-driven architecture promotes decoupled systems where components communicate through events, leading to greater flexibility and scalability.
  • Asynchronous Processing: It allows for asynchronous event processing, enabling systems to handle high loads and improve responsiveness.
  • Improved Maintainability: Using events to trigger actions makes the architecture more maintainable, as changes to one component do not directly impact others.

What are the challenges of using an event-driven architecture as discussed in Architecture Patterns with Python?

  • Complexity in Handling Events: Event-driven systems introduce complexity in managing event flows and ensuring correct system responses.
  • Potential for Circular Dependencies: The book warns about the risk of circular dependencies between event handlers, leading to difficult-to-debug issues.
  • Performance Considerations: The authors discuss trade-offs between synchronous and asynchronous processing, highlighting the need to balance responsiveness with complexity.

Об авторе

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

Follow
Слушать
Now playing
Паттерны архитектуры на Python
0:00
-0:00
Now playing
Паттерны архитектуры на Python
0:00
-0:00
1x
Queue
Home
Swipe
Library
Get App
Try Full Access for 3 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 26,000+ books. That's 12,000+ hours of audio!
Day 2: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 3: Your subscription begins
You'll be charged on Jun 9,
cancel anytime before.
Consume 2.8× More Books
2.8× more books Listening Reading
Our users love us
600,000+ readers
Trustpilot Rating
TrustPilot
4.6 Excellent
This site is a total game-changer. I've been flying through book summaries like never before. Highly, highly recommend.
— Dave G
Worth my money and time, and really well made. I've never seen this quality of summaries on other websites. Very helpful!
— Em
Highly recommended!! Fantastic service. Perfect for those that want a little more than a teaser but not all the intricate details of a full audio book.
— Greg M
Save 62%
Yearly
$119.88 $44.99/year/yr
$3.75/mo
Monthly
$9.99/mo
Start a 3-Day Free Trial
3 days free, then $44.99/year. Cancel anytime.
Unlock a world of fiction & nonfiction books
26,000+ books for the price of 2 books
Read any book in 10 minutes
Discover new books like Tinder
Request any book if it's not summarized
Read more books than anyone you know
#1 app for book lovers
Lifelike & immersive summaries
30-day money-back guarantee
Download summaries in EPUBs or PDFs
Cancel anytime in a few clicks
Scanner
Find a barcode to scan

We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel
Settings
General
Widget
Loading...
We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel