Patrones de arquitectura vistos con Python
(cosmicpython.com)- Un libro en el que Harry, autor de "TDD with Python", y Bob, arquitecto de software, explican cómo entender y gestionar arquitecturas de software complejas
- Comparte una recopilación de técnicas de arquitectura usadas en la práctica en una empresa de comercio electrónico
MADE.comes una empresa europea de venta de muebles en línea que opera una cadena de suministro global- Su objetivo es minimizar el inventario mediante la optimización logística y coordinar que la logística llegue al mismo tiempo que los pedidos de los consumidores
- Pero el mundo real es complejo e impredecible, por lo que construyen software inteligente que refleje eso para automatizarlo
- Este libro aborda patrones de arquitectura diseñados para resolver ese tipo de problemas del mundo real
¿Por qué Python?
- Python es un lenguaje que está creciendo rápidamente a nivel mundial y cada vez enfrenta problemas empresariales más complejos
- La mayoría de los libros de arquitectura existentes usan ejemplos basados en Java o C#, lo que dificulta el acceso para quienes usan Python
- Este libro presenta patrones clásicos de arquitectura de una forma adecuada para la comunidad de Python
Introducción a TDD, DDD y la arquitectura basada en eventos
- TDD (Test-Driven Development):
- El desarrollo guiado por pruebas permite refactorizar con seguridad y agregar funcionalidades
- Se deben priorizar las pruebas unitarias rápidas y sin dependencias, y minimizar las pruebas end-to-end lentas e inestables
- DDD (Domain-Driven Design):
- Se enfoca en el modelo de dominio del negocio, pero es importante reducir la dependencia de la infraestructura y los frameworks
- Arquitectura basada en eventos:
- Gestiona la complejidad mediante comunicación basada en mensajes entre microservicios
- Hay que pensar cómo integrarla con herramientas existentes de Python como Flask, Django y Celery
Nota: la mayoría de los patrones tratados en este libro también se pueden aplicar a arquitecturas monolíticas
- El objetivo de este libro es presentar patrones de arquitectura que soporten TDD, DDD y servicios basados en eventos en Python, y mostrar cómo aplicarlos
Público objetivo de este libro
- Desarrolladores con experiencia manejando aplicaciones complejas en Python
- No es necesario tener conocimientos previos sobre patrones de arquitectura o DDD
- Está estructurado para que también lo puedan seguir quienes no están familiarizados con el estilo TDD de escribir primero las pruebas y luego la implementación
- Se usan Flask, SQLAlchemy, pytest, Docker y Redis, pero no son conocimientos obligatorios
- El objetivo es un diseño de arquitectura independiente de la tecnología, no de una tecnología específica
Resumen de lo que se aprende
Part 1
- Modelado de dominio y DDD (capítulos 1, 2 y 7)
- Introduce cómo construir un modelo de dominio sin dependencias externas
- Explica cómo escribir pruebas unitarias rápidas y considerar su relación con la integridad de los datos
- Describe cómo elegir el Aggregate adecuado
- Patrones Repository, Service Layer y Unit of Work (capítulos 2, 4 y 5)
- Abstraen la capa de persistencia para separar el modelo de las dependencias externas
- Diseñan una capa de servicios como punto de entrada del sistema
- Son adecuados para construir puntos de entrada ligeros como una API en Flask o una CLI
- Reflexiones sobre pruebas y abstracción (capítulos 3 y 5)
- Explora los criterios y el papel de elegir el nivel correcto de abstracción
- Permite lograr la pirámide de pruebas escribiendo pruebas unitarias en niveles altos de abstracción
Part 2
- Arquitectura basada en eventos (capítulos 8–11)
- Introduce los patrones Domain Events, Message Bus y Handler
- Usa eventos para disparar interacciones dentro del sistema
- Explica cómo integrar microservicios mediante eventos
- Distingue la diferencia entre command y event
- Toda la aplicación se transforma en un sistema de procesamiento de mensajes
- CQRS (Command-Query Responsibility Segregation) (capítulo 12)
- Presenta la eficiencia estructural que se logra al separar las responsabilidades de comandos y consultas
- Incluye ejemplos de implementación con y sin uso de eventos
- Inyección de dependencias (capítulo 13)
- Organiza dependencias explícitas e implícitas
- Implementa un framework simple de inyección de dependencias
Apéndice y guía práctica
- Cómo aplicarlo a proyectos existentes (epílogo)
- Aplicar estos patrones a un sistema existente es más difícil que trabajar con ejemplos simples
- Ofrece estrategias de adopción y materiales de referencia para ello
- Prácticas de código y ejemplos en GitHub
- Todo el contenido del libro está organizado como un único proyecto de ejemplo
- Cada capítulo ofrece el código en una rama de GitHub
- Formas de práctica:
- Implementar por cuenta propia la app de ejemplo
- Probar aplicar los patrones a tu propio proyecto
- Usar los "Exercise for the Reader" de cada capítulo para escribir código de práctica
Consejo: se recomienda hacer checkout de la rama correspondiente de GitHub al inicio de cada capítulo para aprender junto con código real en funcionamiento
2 comentarios
Ya existe una edición en coreano: Patrones de arquitectura vistos con Python
Opiniones de Hacker News
Este libro es como una mina de oro sobre patrones de arquitectura. Me gusta que hace que el tema sea fácil de entender
Parte de este libro es muy útil. En especial cuando trata conceptos que no están limitados a Python ni a un lenguaje específico
Veo Python como un buen lenguaje pegamento
Soy desarrollador de Typescript, pero este libro es uno de mis libros de arquitectura favoritos. Siempre lo consulto
Empecé a escribir Python profesionalmente hace unos años. Venía de Kotlin y TypeScript, y aunque el lenguaje era accesible, me costaba lograr bajo acoplamiento y capacidad de prueba
Es realmente uno de los mejores libros de programación en Python. Me decepcionó que el código no tuviera tipado estático, pero fue una decisión intencional del autor
Gracias por compartir tan buen material
Leí la edición en papel de este libro hace dos años y medio o tres. Lo disfruté mucho. Mantiene las pruebas como un tema de primera clase y se actualiza de forma continua con cada añadido
No hay mención de Polylith. Me pregunto si será relevante
Este libro fue una lectura excelente. Hace 3 años trabajaba en un entorno DDD de C#/.NET, y ahora, al revisitar estos conceptos en Python, pude refinar lo esencial