Patrones de solución

Recetas tácticas más allá del GoF. Pipeline, Provider, CQRS, Repository, Saga, Specification…

Patrones que no están en el libro original del Gang of Four pero aparecen una y otra vez en sistemas modernos: pipelines de procesamiento, proveedores intercambiables, separación de lectura y escritura, transacciones distribuidas, resiliencia de red y más.

#El problema

Hay problemas que no son de diseño OO clásico y aparecen en cualquier proyecto de cierto tamaño: ¿cómo coordino una transacción que cruza tres servicios? ¿cómo evito tirar abajo a un proveedor que ya está caído? ¿cómo separo lecturas masivas de escrituras críticas? Sin recetas conocidas, cada equipo reinventa la rueda — y la suele inventar mal, descubriendo los casos borde recién en producción.

#La solución

Estos patrones tácticos son herramientas batalladas por la comunidad: Circuit Breaker para resiliencia, Outbox para consistencia eventual, Repository y Specification para aislar persistencia, CQRS y Saga para separar responsabilidades a escala. Los nombras una vez y todo el equipo entiende qué garantías te da y qué problemas no resuelve.

Algunos vienen de Domain-Driven Design (Repository, Specification, Unit of Work), otros nacen de arquitectura distribuida (CQRS, Event Sourcing, Saga, Outbox) y otros son simplemente mecanismos de plomería que todo equipo termina inventando (Pipeline, Provider, Circuit Breaker).

#Por qué los separamos del GoF

Porque su escala es distinta. Mientras un Strategy vive dentro de una clase, un Saga coordina varios servicios y un Outbox afecta hasta cómo configurás tu base de datos. Mezclarlos con los 23 clásicos solo confunde.

#En este capítulo

  • Resiliencia y comunicaciónCircuit Breaker, Outbox, Pipeline, Provider.
  • Persistencia y dominioRepository, Unit of Work, Specification.
  • Arquitectura distribuidaCQRS, Event Sourcing, Saga.
  • ComposiciónDependency Injection como lenguaje común.

Cada uno con su ejemplo en C#, sus variantes idiomáticas y, sobre todo, cuándo no lo necesitás todavía.

#Lecturas relacionadas

  • Pipeline — Procesa datos a través de una secuencia ordenada de pasos (stages) que transforman su entrada en salida.
  • Producer / Consumer — Desacopla quien genera trabajo de quien lo procesa, usando una cola en memoria como buffer intermedio.
  • Provider Pattern (simple) — Abstrae el acceso a un recurso o servicio externo intercambiable, configurable en runtime.
  • Specification — Encapsula reglas de negocio que devuelven booleanos en objetos componibles (AND, OR, NOT).
  • Unit of Work — Mantiene una lista de operaciones afectadas por una transacción de negocio y coordina su escritura.
  • Repository — Media entre el dominio y el almacenamiento, exponiendo colecciones in-memory ilusorias.
  • Dependency Injection — Provee dependencias a un objeto desde fuera en lugar de que las construya él mismo.
  • CQRS — Separa el modelo de lectura del modelo de escritura para optimizar cada uno por separado.
  • Event Sourcing — Persiste el estado como una secuencia inmutable de eventos en lugar del estado actual.
  • Saga — Coordina transacciones de larga duración entre servicios mediante pasos y compensaciones.
  • Transactional Outbox — Publica eventos de forma fiable a un message broker desde una base de datos transaccional.
  • Circuit Breaker — Protege al sistema de fallos en cascada cortando llamadas a un servicio en problemas.