Saltar al contenido principal

Desacoplamiento

Reducir cuánto necesita saber una parte de un sistema sobre otra, para que cada una pueda cambiar sin arrastrar a la otra con ella.

Dos piezas de código están acopladas cuando un cambio en una obliga, con bastante probabilidad, a cambiar la otra. Desacoplar es reducir esa dependencia, no eliminar el contacto entre ellas, solo acotar qué le está permitido saber a cada una sobre la otra.

Una regla de negocio que llama directamente a db.prepare(...) está acoplada a SQL: cambia la base de datos y la regla cambia con ella. Pon una interfaz entre medio, findConflict, save, y la regla pasa a depender de un contrato en lugar de una implementación. La base de datos puede cambiar detrás de esa interfaz y la regla nunca se entera. Ese mismo cambio se ve mejor de lo que se explica con palabras: a la izquierda, la regla llega directamente hasta SQLite; a la derecha, los dos lados apuntan a la misma interfaz en lugar de apuntarse entre ellos.

Ese es todo el truco. Desacoplar no significa tener menos conexiones en un sistema, la mayoría de las partes de un sistema real todavía necesitan hablar entre ellas. Se trata de qué lado de la conexión tiene permiso para poner las condiciones. La parte reutilizable y estable debería definir la interfaz; la parte específica y sustituible debería depender de ella, no al revés.

La prueba de si algo está realmente desacoplado: ¿puedes reemplazar un lado sin tocar el otro? Si cambiar SQLite por Postgres implica reescribir también la regla de negocio, nunca estuvieron desacoplados, solo repartidos entre dos archivos.

Aparece en