Clean Architecture

A estas alturas seguramente sabrás que tienes que usar Clean Architecture en el desarrollo de tus apps, ¿pero sabes realmente en que consiste y cómo utilizarla correctamente?

En este post quiero ayudarte a que entiendas como se estructura y que beneficios obtendrás al usarla.

¿Qué es Clean Architecture?

El creador de este concepto es Robert C. Martin (Uncle Bob), quien investigando sobre otras arquitecturas llegó a la conclusión de que era interesante definir capas que separasen las áreas del software y de esa forma conseguir que cada una se encargase de una parte determinada del programa.

Definió un esquema formado por círculos concéntricos que representaban las distintas capas de la estructura del programa, consiguiendo el siguiente esquema:

La capa más interna define lo que hace tu app, sería por ello la más abstracta. A medida que vas subiendo por las capas se van concretando los conceptos, hasta llegar a la más externa en donde se especificarían las cosas como el framework que utiliza la aplicación.

Clean Architecture y Android

En Android se empezó a utilizar este esquema para separar el SDK de Android, que es el encargado de la parte visual de la app, de la lógica de negocio que estaría formada por código Java. Por otro lado también se diseñó otra capa encargada de los datos.

El resultado fue crear tres capas: Presentación, Dominio y Datos:

clean android

La capa de presentación es la encargada de contener la vista de la app. Sería todo aquello que se le muestra al usuario por pantalla y con lo que puede interactuar. La forman las activities, los fragment, las Custom views y aquellas clases que se encargan de su control.

La capa de dominio es la encargada de contener el negocio de la aplicación. Aquí encontrarás las clases encargadas de trabajar con los datos y procesar la información.

Por último está la capa de datos. Su cometido es recoger y almacenar los datos con los medios externos como pueden ser la base de datos, una API, un servicio REST, etc.

El beneficio de usar Clean Architecture

Gracias a esta estructura las reglas de negocio del sistema son independientes del framework de Android o de cómo se muestran o se obtienen los datos y de cualquier otro factor externo.

Teniendo esta arquitectura bien montada no tienes que temer que en el futuro se deje de usar una base de datos por otra o que el framework se quede anticuado, la parte de negocio seguirá funcionando exactamente igual.

Además obtienes otro beneficio, como todo está desacoplado del resto puedes hacer test más fácilmente. Al tener separada la parte Android de la parte Java, puedes hacer test unitarios para probar la lógica de tu negocio y por otro lado testear la UI utilizando alguna librería como espresso.

Cómo se comunican las capas en Clean Architecture

Lo primero que debes de saber es que esta arquitectura se rige por la Dependency Rule, según la cual las capas internas no pueden acceder a las externas.

Dependency Rule

Entonces si un elemento de una capa no puede aparecer en otra interna ¿cómo se pueden comunicar entre ellas? Este problema se resuelve utilizando interfaces.

Por ejemplo, ¿cómo se comunicaría una clase presenter con la vista si está en una capa inferior a ella?

Tendrías que crear una interfaz en la capa del presenter, por ejemplo:

Esta interfaz la implementaría tu vista, que como está en una capa superior si puede acceder a la inferior y usarla:

Y la pasarías al presenter por el constructor (o un setter), como aquí estarías pasando una interfaz que forma parte de su propia capa no hay ningún problema:

De esta forma el presenter pese a estar en una capa inferior puede comunicarse con la vista sin tener que referirse directamente a ella.

Conclusión

Clean architecture proporciona una estructura ideal para que tus aplicaciones estén definidas según su funcionalidad.

Utilizarla va a ser un requisito en tus apps ya que te va a facilitar la creación de test y con ello ganarás calidad de código.

Ahora seguro que te animas a seguir esta arquitectura en tus apps. Dime, ¿ya estas utilizando clean architecture en tus proyectos?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *