Skills Agentes

Architecture Patterns

Implementa patrones de arquitectura backend probados: Clean Architecture, Hexagonal Architecture y Domain-Driven Design, para construir sistemas mantenibles, testeables y escalables.

Estrellas
39.8k

en todo el repo

Actividad
43

0–100, la ruta de este skill

Actualizado
hace 4 meses

último commit aquí

Commits
0

últimos 90 días

Contexto
2k tok

94 tok en reposo

Paquete
3 archivos

33 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add wshobson/agents --skill architecture-patterns --agent claude-code

Se instala solo en este repositorio.

Qué hace

  • Aplica Clean Architecture, Hexagonal Architecture y Domain-Driven Design a servicios backend
  • Define capas con dependencias apuntando hacia adentro, puertos/adaptadores y contextos delimitados
  • Diagnostica y corrige problemas de dependencias circulares, fugas de infraestructura y controladores sobrecargados
  • Diseña casos de uso testeables mediante adaptadores en memoria sin base de datos ni Docker

Úsalo cuando

  • Diseñar nuevos servicios backend o microservicios desde cero
  • Refactorizar aplicaciones monolíticas con lógica de negocio entrelazada con modelos ORM o HTTP
  • Establecer bounded contexts antes de dividir un sistema en servicios
  • Depurar ciclos de dependencia donde código de infraestructura contamina la capa de dominio

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • “Ayúdame a diseñar la arquitectura hexagonal para este nuevo microservicio”
    • “Mi capa de casos de uso tiene un ciclo de importación con los adaptadores, ¿cómo lo soluciono?”
    • “Quiero refactorizar este monolito usando bounded contexts de DDD”
    • “Necesito que mis tests de casos de uso no dependan de una base de datos real”

    SKILL.md

    En inglés

    Architecture Patterns

    Master proven backend architecture patterns including Clean Architecture, Hexagonal Architecture, and Domain-Driven Design to build maintainable, testable, and scalable systems.

    Given: a service boundary or module to architect. Produces: layered structure with clear dependency rules, interface definitions, and test boundaries.

    When to Use This Skill

    • Designing new backend services or microservices from scratch
    • Refactoring monolithic applications where business logic is entangled with ORM models or HTTP concerns
    • Establishing bounded contexts before splitting a system into services
    • Debugging dependency cycles where infrastructure code bleeds into the domain layer
    • Creating testable codebases where use-case tests do not require a running database
    • Implementing domain-driven design tactical patterns (aggregates, value objects, domain events)

    Core Concepts

    1. Clean Architecture (Uncle Bob)

    Layers (dependency flows inward):

    • Entities: Core business models, no framework imports
    • Use Cases: Application business rules, orchestrate entities
    • Interface Adapters: Controllers, presenters, gateways — translate between use cases and external formats
    • Frameworks & Drivers: UI, database, external services — all at the outermost ring

    Key Principles:

    • Dependencies point inward only; inner layers know nothing about outer layers
    • Business logic is independent of frameworks, databases, and delivery mechanisms
    • Every layer boundary is crossed via an abstract interface
    • Testable without UI, database, or external services

    2. Hexagonal Architecture (Ports and Adapters)

    Components:

    • Domain Core: Business logic lives here, framework-free
    • Ports: Abstract interfaces that define how the core interacts with the outside world (driving and driven)
    • Adapters: Concrete implementations of ports (PostgreSQL adapter, Stripe adapter, REST adapter)

    Benefits:

    • Swap implementations without touching the core (e.g., replace PostgreSQL with DynamoDB)
    • Use in-memory adapters in tests — no Docker required
    • Technology decisions deferred to the edges

    3. Domain-Driven Design (DDD)

    Strategic Patterns:

    • Bounded Contexts: Isolate a coherent model for one subdomain; avoid sharing a single model across the whole system
    • Context Mapping: Define how contexts relate (Anti-Corruption Layer, Shared Kernel, Open Host Service)
    • Ubiquitous Language: Every term in code matches the term used by domain experts

    Tactical Patterns:

    • Entities: Objects with stable identity that change over time
    • Value Objects: Immutable objects identified by their attributes (Email, Money, Address)
    • Aggregates: Consistency boundaries; only the root is accessible from outside
    • Repositories: Persist and reconstitute aggregates; abstract over the storage mechanism
    • Domain Events: Capture things that happened inside the domain; used for cross-aggregate coordination

    Detailed patterns and worked examples

    Detailed pattern documentation lives in references/details.md. Read that file when the navigation tier above is insufficient.

    Testing — In-Memory Adapters

    The hallmark of correctly applied Clean Architecture is that every use case can be exercised in a plain unit test with no real database, no Docker, and no network:

    # tests/unit/test_create_user.py
    import asyncio
    from typing import Dict, Optional
    from domain.entities.user import User
    from domain.interfaces.user_repository import IUserRepository
    from use_cases.create_user import CreateUserUseCase, CreateUserRequest
    
    
    class InMemoryUserRepository(IUserRepository):
        def __init__(self):
            self._store: Dict[str, User] = {}
    
        async def find_by_id(self, user_id: str) -> Optional[User]:
            return self._store.get(user_id)
    
        async def find_by_email(self, email: str) -> Optional[User]:
            return next((u for u in self._store.values() if u.email == email), None)
    
        async def save(self, user: User) -> User:
            self._store[user.id] = user
            return user
    
        async def delete(self, user_id: str) -> bool:
            return self._store.pop(user_id, None) is not None
    
    
    async def test_create_user_succeeds():
        repo = InMemoryUserRepository()
        use_case = CreateUserUseCase(user_repository=repo)
    
        response = await use_case.execute(CreateUserRequest(email="alice@example.com", name="Alice"))
    
        assert response.success
        assert response.user.email == "alice@example.com"
        assert response.user.id is not None
    
    
    async def test_duplicate_email_rejected():
        repo = InMemoryUserRepository()
        use_case = CreateUserUseCase(user_repository=repo)
    
        await use_case.execute(CreateUserRequest(email="alice@example.com", name="Alice"))
        response = await use_case.execute(CreateUserRequest(email="alice@example.com", name="Alice2"))
    
        assert not response.success
        assert "already exists" in response.error
    

    Troubleshooting

    Use case tests require a running database

    Business logic has leaked into the infrastructure layer. Move all database calls behind an IRepository interface and inject an in-memory implementation in tests (see Testing section above). The use case constructor must accept the abstract port, not the concrete class.

    Circular imports between layers

    A common symptom is ImportError: cannot import name X between use_cases and adapters. This happens when a use case imports a concrete adapter class instead of the abstract port. Enforce the rule: use_cases/ imports only from domain/ (entities and interfaces). It must never import from adapters/ or infrastructure/.

    Framework decorators appearing in domain entities

    If SQLAlchemy Column() or Pydantic Field() annotations appear on domain entities, the entity is no longer pure. Create a separate ORM model in adapters/repositories/ and map to/from the domain entity in the repository's _to_entity() method.

    All logic ending up in controllers

    When the controller grows beyond HTTP parsing and response formatting, extract the logic into a use case class. A controller method should do three things only: parse the request, call a use case, map the response.

    Value objects raising errors too late

    Validate invariants in __post_init__ (Python) or the constructor so an invalid Email or Money cannot be constructed at all. This surfaces bad data at the boundary, not deep inside business logic.

    Context bleed across bounded contexts

    If the Order context is importing User entities from the Identity context, introduce an Anti-Corruption Layer. The Order context should hold its own lightweight CustomerId value object and only call the Identity context through an explicit interface.

    Advanced Patterns

    For detailed DDD bounded context mapping, full multi-service project trees, Anti-Corruption Layer implementations, and Onion Architecture comparisons, see:

    Related Skills

    • microservices-patterns — Apply these architecture patterns when decomposing a monolith into services
    • cqrs-implementation — Use Clean Architecture as the structural foundation for CQRS command/query separation
    • saga-orchestration — Sagas require well-defined aggregate boundaries, which DDD tactical patterns provide
    • event-store-design — Domain events produced by aggregates feed directly into an event store

    Reproducido de wshobson/agents bajo licencia MIT. Leer esta página en markdown.

    Archivos

    3 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Detalles

    Creador
    wshobson
    Licencia
    MIT
    Recursos incluidos
    referencias
    Repositorio
    wshobson/agents
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de wshobson/agents

    Este repo incluye 183 skills. Si instalas uno, normalmente ya tienes los demás. Ver el pack agents entero y su comando de instalación

    Instala y opera Hermes Tweet, un plugin de Hermes Agent para investigar X/Twitter, leer timelines, analizar tweets y ejecutar operaciones privadas o de cambio de estado con aprobación previa.

    Costo de contexto al activarse
    1.4k tok
    Tamaño del paquete
    3 archivos
    Última actualización
    el mes pasado
    redes sociales

    Úsalo para mantener un almacén Markdown de conocimiento donde cada afirmación compilada se rastrea hasta una fuente inmutable y el drift se detecta con git diff sin gastar tokens.

    Costo de contexto al activarse
    1.4k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 24 días
    documentos

    Úsalo al diseñar o revisar un esquema específico de PostgreSQL: buenas prácticas, tipos de datos, indexación, restricciones, patrones de rendimiento y funciones avanzadas.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 24 días
    bases de datos

    Úsalo cuando un proyecto guarda su estado en Superself: lee `self context` al iniciar sesión, vincula el trabajo a una work unit, reporta con evidencia y registra decisiones confirmadas.

    Costo de contexto al activarse
    1.3k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 24 días
    productividad

    Úsalo cuando pidan optimizar un prompt, mejorar su rendimiento, diseñar una plantilla, aplicar chain-of-thought, few-shot prompting o técnicas avanzadas de prompt engineering para producción.

    Costo de contexto al activarse
    1.3k tok
    Tamaño del paquete
    10 archivos
    Última actualización
    el mes pasado
    herramientas desarrollo

    Audita y reescribe prosa para que deje de sonar generada por máquina. Incluye modo solo-detección, modo reescritura y modo edición en el lugar, con perfiles opcionales de voz y contexto.”

    Costo de contexto al activarse
    1.9k tok
    Tamaño del paquete
    4 archivos
    Última actualización
    el mes pasado
    redaccion contenido

    Skills relacionados

    Migra de AngularJS a Angular usando modo híbrido, reescritura incremental de componentes y actualización de la inyección de dependencias.

    Costo de contexto al activarse
    1.8k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 4 meses
    herramientas desarrollo

    Domina asyncio, programación concurrente y patrones async/await para apps de alto rendimiento con operaciones no bloqueantes.

    Costo de contexto al activarse
    1.9k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 4 meses
    herramientas desarrollo

    Automatiza la generación de changelogs a partir de commits, PRs y releases siguiendo el formato Keep a Changelog. Útil al configurar flujos de release o estandarizar convenciones de commits.

    Costo de contexto al activarse
    837 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 4 meses
    herramientas desarrollo