5 pontos por GN⁺ 2025-03-29 | 2 comentários | Compartilhar no WhatsApp
  • 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

 
xguru 2025-03-29

Há uma edição em coreano disponível: Padrões de Arquitetura em Python

 
GN⁺ 2025-03-29
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

    • Mas, na prática, esses padrões podem causar problemas de complexidade e desempenho. Especialmente ao usar frameworks já muito opinativos, como o Django
    • Já usei Python em empresas grandes e pequenas. Nas grandes empresas que usam padrões de arquitetura rígidos, o código é "limpo", mas complexo demais e lento
    • Por outro lado, nas grandes empresas que ignoravam esses padrões, o código era realmente bagunçado, mas a produtividade era alta. Mesmo com o código bagunçado, dava para ler, entender e modificar
    • Isso pode dizer mais sobre mim do que sobre o assunto, mas eu era mais produtivo em empresas com código não estruturado. Podia evitar discussões sobre código limpo
  • Parte deste livro é muito útil. Especialmente quando trata de conceitos que não se limitam a Python ou a uma linguagem específica

    • Mas em outras partes há problemas. Pode ser perigoso quando desenvolvedores menos experientes tentam implementar tudo de uma vez
    • Por exemplo, o padrão de repositório geralmente é útil, mas em muitos casos, incluindo os exemplos do livro, ele só adiciona complexidade
    • Camada de serviço e unidade de trabalho são úteis em aplicações complexas, mas podem ficar inchadas demais em sistemas compostos por pequenos serviços
    • Padrões de design, como qualquer outra ferramenta, exigem entender quando devem ser usados e quando não devem. O livro oferece orientação sobre isso, mas deveria enfatizar mais esse ponto
  • Vejo Python como uma boa linguagem de cola

    • Uma crítica à mentalidade OOP imposta. Uma crítica a forçar encapsulamento e herança em tudo
    • Uma crítica a SOLID, clean coding, clean architecture, padrões GoF e Uncle Bob
    • Sigo um fluxo imperativo ou funcional e uso o mínimo possível de OOP
    • Ao usar Python, quero uma experiência sem objetos e sem padrões
    • Isso não significa que este livro não tenha valor. Ele é útil para aprender padrões. Mas não se deve encaixar tudo à força na programação real
  • Sou desenvolvedor Typescript, mas este é um dos meus livros favoritos sobre arquitetura. Sempre volto a consultá-lo

    • Uso quase religiosamente o padrão de falsa unidade de trabalho/serviço para testes. Isso ajuda a criar versões falsas de serviços de terceiros
    • Recomendo nomear eventos de uma forma específica do domínio. Isso resolve partes que seriam trabalhosas de explicar aos colegas de equipe
    • Cosmic Python está totalmente disponível online, então é fácil compartilhar o link. No geral, é um recurso excelente e muito formativo
  • 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

    • Comprei este livro por recomendação de um colega e o li do começo ao fim. Isso me ajudou a entender como gerenciar a complexidade em codebases Python complexas
    • Não sigo todos os padrões, mas passei a conhecer as possibilidades e como aplicar em Python experiências de outros paradigmas
    • Recomendo fortemente. Vale a pena
  • 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

    • Ter testes prontos, fáceis de escrever e fáceis de atualizar torna o processo de desenvolvimento mais agradável. Há menos necessidade de executar o código manualmente para verificar problemas
    • A parte orientada a eventos foi interessante, mas não era prática para implementar no meu trabalho atual
  • 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

    • Se você se interessa por esse tipo de tema, recomendo fortemente