Explica cómo cohesión, acoplamiento y connascence permiten evaluar límites, conocimiento compartido y propagación de cambios entre módulos y servicios.
Última actualización
Actualizada
Nivel
Fundamentos
La calidad de un límite puede evaluarse observando qué responsabilidades permanecen juntas y qué cambios se propagan a otras partes. Cohesión, acoplamiento y connascence permiten razonar sobre ese costo de cambio.
La arquitectura intenta localizar cambios. Para lograrlo necesita módulos con responsabilidades relacionadas y dependencias explícitas.
Cohesión pregunta cuánto pertenecen juntas las partes de un módulo.
Acoplamiento pregunta cuánto depende una parte de otra.
Connascence pregunta qué conocimiento compartido obliga a cambiar dos elementos coordinadamente.
No existe software sin acoplamiento. El objetivo es mantenerlo visible, débil cuando cruza límites y fuerte únicamente donde protege una responsabilidad común.
Un módulo tiene alta cohesión cuando sus elementos:
Expresan una capacidad reconocible.
Cambian por razones relacionadas.
Comparten invariantes y lenguaje.
Pueden entenderse como una unidad.
Texto
Inventory
├── disponibilidad
├── reservas
├── movimientos
└── reglas de stock
Estas responsabilidades tienen relación semántica. En cambio, un módulo CommonService que valida usuarios, envía correos, calcula impuestos y genera PDFs posee baja cohesión.
Operaciones agrupadas porque ocurren en el mismo momento, por ejemplo inicialización. Puede ser válida, pero no siempre representa una capacidad estable.
Ambas partes deben referirse exactamente a la misma entidad o mensaje.
La fuerza importa. Connascence por nombre suele ser más fácil de gestionar que por algoritmo o timing. La distancia también importa: una dependencia fuerte dentro de un módulo es menos peligrosa que entre servicios remotos.
Parece centralizar el flujo, pero mezcla capacidades con ritmos, datos y fallos distintos.
Una separación más cohesionada puede ser:
Texto
Orders
→ posee estados y reglas del pedido
Inventory
→ posee stock y reservas
Payments
→ posee intentos y resultados
Notifications
→ entrega mensajes
Reporting
→ consume proyecciones
Orders coordina mediante contratos. Esto no elimina acoplamiento: ahora debe elegir sincronía, eventos, errores y consistencia. La mejora consiste en hacer explícita la colaboración y evitar ownership compartido.
Duplicar una transformación pequeña puede reducir acoplamiento entre contextos. Eliminar toda duplicación mediante una librería compartida puede crear coordinación permanente.