>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Unknown

Un mapa de patrones de arquitectura para desarrolladores y líderes técnicos

Awesome Software Architecture Banner

Cuando te incorporas a un proyecto de microservicios, rápidamente notas un detalle característico. Cada desarrollador entiende la arquitectura limpia de manera diferente. Uno intenta meter CQRS en un CRUD de tres páginas, otro construye un dominio monumental con una docena de capas de envoltorios, y un tercero resuelve problemas de acoplamiento mediante Event Sourcing. Para que un equipo hable el mismo idioma, necesitas una base de conocimientos unificada.

Cada uno de nosotros tiene docenas de enlaces a artículos y videos marcados como favoritos. El problema es que estos materiales se pierden rápidamente. El autor del repositorio awesome-software-architecture, Mehdi Hadeli, resolvió este problema: compiló una colección estructurada de materiales de diseño de sistemas en un solo lugar.

Qué es el repositorio

Esta es una base de conocimientos abierta con enlaces a artículos, tutoriales, libros y ejemplos de código. El proyecto ha recopilado más de 11,000 estrellas en GitHub. A diferencia de los directorios estilo Awesome estándar, no solo estructura temas generales, sino que cubre patrones específicos y decisiones arquitectónicas.

Los desarrolladores también lanzaron un sitio web separado awesome-architecture.com donde es más cómodo leer materiales que en archivos Markdown.

Secciones principales de la colección

Estilos y enfoques arquitectónicos

El repositorio desglosa detalladamente las formas de organizar el código:

  • Monolitos y microservicios. Desde el Monolito clásico hasta el concepto de Monolito Modular, que ayuda a preparar el código para una división eventual.
  • Arquitecturas por capas. Un desglose de las diferencias entre Clean Architecture, Onion y Hexagonal.
  • Vertical Slice Architecture. Un enfoque que agrupa el código alrededor de características de negocio en lugar de capas técnicas.
  • Actor Model. Principios de operación de actores con ejemplos usando los frameworks Akka.NET, Orleans y ProtoActor.

Domain-Driven Design y CQRS

La sección de DDD resultó ser la más detallada. El autor desglosó el concepto de Eric Evans en sus elementos componentes. El catálogo tiene materiales sobre diseño estratégico (Bounded Context, Ubiquitous Language) y patrones tácticos (Aggregates, Value Objects, Domain Services). Los anti-patrones como el Anemic Domain Model se cubren por separado.

Se asigna un bloque dedicado al tema de CQRS, abordando la separación del modelo de lectura/escritura, la consistencia de datos y su conexión con Event Sourcing.

Sistemas distribuidos y nubes

Al diseñar servicios en la nube, la sección de Cloud Design Patterns será útil:

  • Patrones de resiliencia: Circuit Breaker, Bulkhead, Retry.
  • Mensajería: Outbox, Inbox, Saga, Change Data Capture.
  • Componentes de red: API Gateway (Ambassador, Kong, Ocelot), Service Mesh (Istio, Linkerd) y soluciones de balanceo de carga.

La colección también incluye materiales sobre herramientas de infraestructura: Kubernetes, Terraform, Nomad, Kafka, RabbitMQ y NATS.

Observabilidad y confiabilidad

Una sección separada está dedicada a Observability. Contiene artículos sobre trazabilidad de extremo a extremo mediante Correlation ID, recolección de logs a través de stacks ELK, EFK, Fluent Bit y Grafana Loki. Además, cubre back pressure y la construcción de sistemas tolerantes a fallos.

Características y matices de la colección

Encontrarás tablas marcadas como TODO en el propio README. No te alarmes: los artículos sobre estos temas ya están en la carpeta docs. La navegación está bien organizada, con materiales distribuidos en directorios, lo que facilita encontrar el tema que necesitas mediante búsqueda.

El punto débil del repositorio es un sesgo notable hacia el stack .NET en las secciones específicas de frameworks. Bibliotecas como Steeltoe, MassTransit o CAP se mencionan frecuentemente allí. Sin embargo, los conceptos fundamentales son los mismos en todas partes. Funcionan para proyectos en Go, Java, Python o TypeScript.

Cómo usar el catálogo en la práctica

  1. Preparación para entrevistas de System Design. La colección cubre la mayoría de las preguntas formuladas en las secciones de arquitectura.
  2. Referencia para diseñar sistemas. Ayuda a refrescar la memoria sobre la diferencia entre actores y servicios clásicos, o elegir el patrón de mensajería correcto.
  3. Incorporación y formación de equipos. Los enlaces del repositorio funcionan como una lista de lectura para immergir a los desarrolladores en la arquitectura del proyecto.

El repositorio awesome-software-architecture será útil para desarrolladores que transitan de escribir funciones a diseñar sistemas. Guarda el proyecto en favoritos para que el artículo correcto sobre patrones siempre esté a mano.

Proyectos relacionados