Explica cómo asignar responsabilidades y diseñar colaboraciones entre objetos, componentes y servicios para mantener cohesión, límites claros y dependencias explícitas.
Última actualización
Actualizada
Nivel
Aplicación
Diseñar responsabilidades significa decidir quién conoce información, quién toma decisiones y quién coordina colaboradores. Una responsabilidad sin dueño termina duplicada; un dueño con demasiadas responsabilidades termina acoplado a todo.
La asignación de responsabilidades busca alta cohesión y acoplamiento controlado. Cada elemento debería cambiar por razones relacionadas y depender solo de aquello que necesita.
En un diseño improvisado, el controller valida reglas, calcula precios, consulta inventario, cobra, persiste y envía correos. Funciona al inicio, pero cualquier cambio toca el mismo punto y las pruebas requieren montar todo el sistema.
Separar responsabilidades no significa crear una capa por moda. Significa ubicar decisiones donde existe la información adecuada y hacer explícitas las colaboraciones.
Operaciones que deben ocurrir juntas pueden pertenecer al mismo límite. Sin embargo, agrupar todo para obtener una sola transacción puede crear un componente enorme. Distingue invariantes locales de procesos distribuidos.
Más separación facilita pruebas y cambio, pero añade contratos y navegación. Menos capas reduce ceremonia, pero puede acoplar reglas a transporte o proveedores. El tamaño, complejidad y ritmo de cambio determinan el nivel adecuado.
No crees interfaces o servicios anticipando una variación puramente hipotética. Extrae cuando existe un límite, una dependencia costosa, varias implementaciones, necesidad de prueba o evolución probable respaldada por contexto.