Skip to main content

Inicia sesión en CleanKata

Sigue tu progreso, gana XP y desbloquea todas las lecciones.

Al iniciar sesión aceptas nuestros Términos de uso y Política de privacidad.

Arquitectura Limpia60 XP6 min

Componentes: La Unidad de Despliegue

Los componentes son las unidades desplegables más pequeñas — JARs, DLLs, Gemas — los bloques de construcción de una arquitectura de plugins conectados en tiempo de ejecución.

Por qué importa

Un componente es la unidad desplegable y desarrollable más pequeña de un sistema — el archivo JAR en Java, la DLL en Windows, la Gem en Ruby, el paquete npm en Node. Los componentes son el nivel de granularidad al que se despliega el software: pueden enlazarse en un único ejecutable, o mantenerse como plugins desplegables independientemente que se conectan en tiempo de ejecución.

La evolución hacia la conectabilidad en tiempo de ejecución es significativa. Cuando los componentes pueden intercambiarse en tiempo de ejecución sin recompilar el resto del sistema, la arquitectura se convierte en una arquitectura de plugins — nuevas funcionalidades, nuevas integraciones y nuevos comportamientos llegan como nuevos componentes, dejando el núcleo existente intacto. Un módulo monolítico que mezcla preocupaciones no relacionadas obliga a que todo el sistema sea probado y redespliegado cada vez que cambia cualquier parte de él. El objetivo de la arquitectura de componentes es romper ese acoplamiento para que cada pieza desplegable independientemente tenga su propio versionado y cadencia de publicación.

✗El problema

A monolithic module bundles unrelated concerns — changing any one part forces a full redeploy of everything else.

Bad

# user_auth.py — HTTP logic, DB models, email, AND auth rules all mixed together

class User:
    id: int
    email: str

def hash_password(pw: str) -> str: ...
def send_welcome_email(user: User) -> None: ...  # depends on email server
def save_user(user: User) -> None: ...           # depends on database
def validate_token(token: str) -> bool: ...      # auth logic
def render_profile_page(user: User) -> str: ...  # depends on HTML templates

# Changing the email template forces a full redeploy of auth logic, DB code, etc.
// src/app.ts — auth, DB, email, HTTP all in one module

export function hashPassword(pw: string): string { /* ... */ }
export function sendWelcomeEmail(user: User): void { /* email dep */ }
export function saveUser(user: User): Promise<void> { /* DB dep */ }
export function validateToken(token: string): boolean { /* ... */ }
export function renderProfilePage(user: User): string { /* template dep */ }

// A bug in sendWelcomeEmail forces a full redeploy of all auth and DB code.

✓La solución

Separate packages with clear boundaries — each with its own version and release cadence. A change to notifications never touches auth or user packages.

Good

# auth/         ← pure auth logic, no external deps
#   tokens.py, passwords.py
#
# users/        ← user domain — depends on auth, not on email or HTTP
#   models.py
#
# notifications/ ← email/SMS — versioned separately
#   email.py
#
# api/           ← HTTP layer — depends on users + auth
#   routes.py

# Each package has its own version tag.
# A change to notifications/email.py triggers only notifications tests + deploy.
// packages/auth/         — pure auth logic
//   index.ts: export { hashPassword, validateToken }
//
// packages/users/        — user domain
//   index.ts: export { User, saveUser }
//
// packages/notifications/ — email/SMS
//   index.ts: export { sendWelcomeEmail }
//
// packages/api/          — HTTP layer
//   index.ts: import from auth, users, notifications

// Fixing a bug in notifications only redeploys that package.
// auth and users packages are never touched.

💡Conclusión clave

Si no puedes desplegar una parte de tu sistema sin redesplegar todo, tienes un monolito disfrazado de componentes. Los verdaderos componentes tienen versionado y despliegue independientes — cambiar una parte deja el resto probablemente sin cambios.

🔧 Algunos ejercicios pueden tener errores. Si algo parece incorrecto, usa el botón Feedback (abajo a la derecha) para reportarlo — nos ayuda a corregirlo rápido.

Pista: Si no puedes desplegar una parte de tu sistema sin redesplegar todo, tienes un monolito, no componentes.

✗ Tu versión

Componentes: La Unidad de Despliegue — CleanKata — CleanKata