Padrões de arquitetura vistos com Python
(cosmicpython.com)- Livro em que Harry, autor de "TDD with Python", e Bob, arquiteto de software, explicam como entender e gerenciar arquiteturas de software complexas
- Compartilha uma organização de técnicas de arquitetura usadas na prática em uma empresa de e-commerce
MADE.comé uma empresa europeia de venda online de móveis, que opera uma cadeia de suprimentos global- O objetivo é minimizar o estoque por meio da otimização logística e coordenar para que a logística chegue ao mesmo tempo que os pedidos dos consumidores
- Mas o mundo real é complexo e imprevisível, então eles estão construindo softwares inteligentes que refletem isso para automatizar o processo
- Este livro aborda padrões de arquitetura criados para resolver esse tipo de problema do mundo real
Por que Python
- Python é uma linguagem que cresce rapidamente no mundo todo e está enfrentando problemas corporativos cada vez mais complexos
- A maioria dos livros de arquitetura existentes usa exemplos baseados em Java ou C#, o que dificulta o acesso para usuários de Python
- Este livro apresenta padrões clássicos de arquitetura de uma forma adequada à comunidade Python
Introdução a TDD, DDD e arquitetura orientada a eventos
- TDD (Test-Driven Development):
- O desenvolvimento guiado por testes permite refatorações seguras e a adição de funcionalidades
- Deve-se priorizar testes unitários rápidos e sem dependências, minimizando testes end-to-end lentos e instáveis
- DDD (Domain-Driven Design):
- O foco está no modelo de domínio do negócio, mas também é importante reduzir a dependência de infraestrutura e frameworks
- Arquitetura orientada a eventos:
- Gerencia a complexidade com comunicação baseada em mensagens entre microsserviços
- É preciso refletir sobre como integrar isso com ferramentas Python já existentes, como Flask, Django e Celery
Referência: a maioria dos padrões tratados neste livro também pode ser aplicada a arquiteturas monolíticas
- O objetivo deste livro é apresentar padrões de arquitetura que dão suporte a TDD, DDD e serviços orientados a eventos em Python, além de mostrar como aplicá-los
Público-alvo deste livro
- Desenvolvedores com experiência em lidar com aplicações Python complexas
- Não é necessário ter conhecimento prévio sobre padrões de arquitetura ou DDD
- A estrutura foi pensada para que mesmo quem não está acostumado ao estilo TDD de escrever testes primeiro e implementar depois consiga acompanhar
- São usados Flask, SQLAlchemy, pytest, Docker e Redis, mas isso não é conhecimento obrigatório
- O objetivo é um projeto de arquitetura independente de tecnologia, e não de uma tecnologia específica
Visão geral do que será aprendido
Part 1
- Modelagem de domínio e DDD (capítulos 1, 2 e 7)
- Introduz como construir modelos de domínio sem dependências externas
- Considera como escrever testes unitários rápidos e sua relação com a integridade dos dados
- Explica como escolher o Aggregate adequado
- Padrões Repository, Service Layer e Unit of Work (capítulos 2, 4 e 5)
- Abstraem a camada de persistência para separar o modelo de dependências externas
- Projetam a camada de serviço como ponto de entrada do sistema
- São adequados para construir pontos de entrada enxutos, como APIs Flask ou CLI
- Reflexões sobre testes e abstração (capítulos 3 e 5)
- Explora os critérios para escolher o nível adequado de abstração e seu papel
- Escreve testes unitários em um nível mais alto de abstração para alcançar a pirâmide de testes
Part 2
- Arquitetura orientada a eventos (capítulos 8–11)
- Introduz os padrões Domain Events, Message Bus e Handler
- Dispara interações dentro do sistema por meio de eventos
- Explica como integrar microsserviços usando eventos
- Distingue a diferença entre command e event
- A aplicação inteira passa a se tornar um sistema de processamento de mensagens
- CQRS (Command-Query Responsibility Segregation) (capítulo 12)
- Apresenta a eficiência estrutural obtida ao separar responsabilidades de comando e consulta
- Inclui exemplos de implementação com e sem uso de eventos
- Injeção de dependência (capítulo 13)
- Organiza dependências explícitas e implícitas
- Implementa um framework simples de injeção de dependência
Apêndice e guia prático
- Como aplicar em projetos existentes (epílogo)
- Aplicar padrões em sistemas existentes é mais difícil do que em exemplos simples
- Fornece estratégias de adoção e materiais de referência para isso
- Prática com código e exemplos no GitHub
- Todo o conteúdo do livro é organizado em um único projeto de exemplo
- Cada capítulo disponibiliza código em branches do GitHub
- Formas de prática:
- Implementar você mesmo o app de exemplo acompanhando o material
- Tentar aplicar os padrões ao seu próprio projeto
- Usar o "Exercise for the Reader" de cada capítulo para escrever código de prática
Dica: recomenda-se fazer checkout da branch correspondente no GitHub no início de cada capítulo para estudar junto com o código real em funcionamento
2 comentários
Há uma edição em coreano disponível: Padrões de Arquitetura em Python
Comentários do Hacker News
Este livro é uma mina de ouro sobre padrões de arquitetura. Gosto do fato de tornar o tema fácil de entender
Parte deste livro é muito útil. Especialmente quando trata de conceitos que não se limitam a Python ou a uma linguagem específica
Vejo Python como uma boa linguagem de cola
Sou desenvolvedor Typescript, mas este é um dos meus livros favoritos sobre arquitetura. Sempre volto a consultá-lo
Comecei a escrever Python profissionalmente há alguns anos. Vim de Kotlin e TypeScript, e embora a linguagem fosse acessível, tive dificuldade para alcançar baixo acoplamento e testabilidade
Este é realmente um dos grandes livros de programação em Python. Só achei uma pena o código não ter tipagem estática, mas isso foi uma decisão deliberada dos autores
Obrigado por compartilhar esse excelente material
Li a versão em paperback deste livro há 2 anos e meio ou 3 anos. Foi muito agradável. Ele mantém testes como tema de primeira classe e continua atualizando isso a cada adição
Não há menção ao Polylith. Fico curioso se isso é relevante
Este livro foi uma ótima leitura. Há 3 anos eu trabalhava em um ambiente de DDD com C#/.NET, e agora, revisitando esses conceitos em Python, estou refinando o que é essencial