Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arquitectura Limpia
Arquitectura Limpia
En los últimos años hemos visto gran cantidad de ideas sobre arquitectura de
sistemas. Algunas son:
Aunque todas estas arquitecturas pueden variar en algunos detalles, son muy
similares. Todos tienen el mismo objetivo, que es la separación de intereses o
principios (separation of concerns). Todos los frameworks descritos cumplen
esta separación dividiendo la aplicación en capas. Cada una de estas
arquitecturas produce sistemas con las siguientes características:
La regla de dependencia
Los círculos concéntricos representan diferentes áreas del software. En general,
cuanto más nos alejemos del núcleo mayor es el nivel del software. Los círculos
exteriores son mecanismos mientras que los interiores son políticas. La regla
primordial que hace que esta arquitectura funcione es la regla de dependencia.
Esta regla dice que las dependencias a nivel de código fuente sólo pueden
apuntar hacia dentro. Nada que se encuentre en un círculo interior puede saber
algo sobre lo que hay en un círculo exterior. Particularmente, algo declarado en
un círculo externo no puede ser mencionado desde el código situado en un
círculo interno. Eso incluye funciones, clases, variables o cualquier otra entidad
software. Por la misma razón, los formatos de datos usados en un círculo exterior
no deberían usarse por un círculo interior, especialmente si esos formatos son
generados por algún framework en un círculo situado al exterior. No queremos
que nada de un círculo exterior impacte en los círculos o niveles interiores.
Entidades
Las entidades encapsulan la lógica de negocio de la empresa (hablamos de
software empresarial). Una entidad puede ser un objeto con métodos, o puede
ser un conjunto de estructuras de datos y funciones. No importa mientras las
entidades se puedan re/utilizar desde diferentes aplicaciones de la empresa.
Casos de uso
El software de esta capa contiene reglas de negocio específicas de la aplicación.
Encapsula e implementa todos los casos de uso del sistema. Estos casos de uso
dirigen el flujo de datos hacía y desde las entidades y hacen que las entidades
usen su lógica de negocio empresarial para conseguir el objetivo del caso de
uso. Los cambios en esta capa no deberían afectar a las entidades. Tampoco
esperamos que cambios externos como en la base de datos, algún framework o
la interfaz gráfica afecten a esta capa. Esta capa se encuentra aislada de ese
tipo de principios (concerns). En cambio si esperamos que cambios en las
operaciones de la aplicación afecten a los casos de uso y por tanto al software
de esta capa. Si los detalles de un caso de uso cambian, entonces algo de código
de esta capa cambiará indudablemente.
Frameworks y Drivers
El círculo o capa más externa se compone generalmente de frameworks y
herramientas como la base de datos, el framework web, etc. Normalmente en
esta capa sólo se escribe código que actúa de pegamento con los círculos o
capas interiores. En esta capa es donde van todos los detalles. La web es un
detalle. La base de datos es un detalle. Mantenemos estas cosas fuera del
alcance donde no pueden hacer mucho daño.
Conclusión
Aplicar estas sencillas reglas no es difícil y nos ahorrarán un montón de dolores
de cabeza según avancemos. Separando el software en capas y aplicando la
regla de dependencias, crearemos un sistema intrínsecamente testeable con
todas las ventajas que implica. Cuando cualquiera de las partes del sistema se
vuelve obsoleta, como la base de datos, o el framework web, puedes
reemplazarlos sin mucho esfuerzo.