5 puntos por GN⁺ 2025-03-29 | 2 comentarios | Compartir por WhatsApp
  • 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.com es 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

 
xguru 2025-03-29

Ya existe una edición en coreano: Patrones de arquitectura vistos con Python

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

    • Pero en la práctica, estos patrones pueden causar problemas de complejidad y rendimiento. Especialmente cuando usas frameworks con opiniones fuertes como Django
    • He usado Python tanto en empresas grandes como pequeñas. Las empresas grandes que usan patrones arquitectónicos estrictos tienen código "limpio", pero es demasiado complejo y lento
    • En cambio, las empresas grandes que ignoraban los patrones tenían un código realmente desordenado, pero eran más productivas. Aunque el código fuera desordenado, se podía leer, entender y modificar
    • Puede que esto diga más sobre mí, pero yo era más productivo en empresas con código no estructurado. Podía evitar discusiones sobre código limpio
  • 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

    • Pero en otras partes tiene problemas. Puede ser riesgoso cuando desarrolladores con poca experiencia intentan implementar todo de una sola vez
    • Por ejemplo, el patrón repositorio suele ser útil, pero en muchos casos, incluidos los ejemplos del libro, solo añade complejidad
    • La capa de servicios y la unidad de trabajo son útiles en aplicaciones complejas, pero en sistemas compuestos por servicios pequeños pueden volverse excesivamente pesadas
    • Los patrones de diseño, como cualquier otra herramienta, requieren entender cuándo usarlos y cuándo no. Este libro da consejos sobre eso, pero debería enfatizarlo más
  • Veo Python como un buen lenguaje pegamento

    • Una guía contra una mentalidad de OOP forzada. Una guía contra obligar a usar encapsulación y herencia para todo
    • Una guía contra SOLID, clean coding, clean architecture, los patrones GoF y Uncle Bob
    • Sigo un flujo imperativo o funcional y uso la menor cantidad posible de OOP
    • Cuando uso Python, quiero una experiencia sin objetos ni patrones
    • Eso no significa que este libro no tenga valor. Es útil para aprender patrones. Pero no hay que intentar ajustar todo a la programación real
  • Soy desarrollador de Typescript, pero este libro es uno de mis libros de arquitectura favoritos. Siempre lo consulto

    • Uso casi religiosamente el patrón de unidad de trabajo/servicio falsa para pruebas. Ayuda a simular servicios de terceros
    • Recomiendo nombrar los eventos de una forma específica del dominio. Eso resuelve partes que son molestas de explicar al equipo
    • Cosmic Python está completamente disponible en línea, así que es fácil enlazarlo. En general, es un recurso excelente y muy formativo
  • 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

    • Por recomendación de un colega, compré este libro y lo leí de principio a fin. Me ayudó a entender cómo gestionar la complejidad en bases de código Python complejas
    • No sigo todos los patrones, pero aprendí qué posibilidades hay y cómo aplicar en Python experiencias de otros paradigmas
    • Lo recomiendo mucho. Vale la pena
  • 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

    • Tener pruebas listas, fáciles de escribir y fáciles de actualizar hace que el proceso de desarrollo sea más disfrutable. Hace menos necesario ejecutar el código manualmente para verificar problemas
    • La parte orientada a eventos me pareció interesante, pero no fue práctica de implementar en mi trabajo actual
  • 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

    • Si te interesan temas como este, lo recomiendo mucho