🌱 Clean Architecture desde cero
¿Qué es Clean Architecture?
Aquí hay dos palabras muy importantes en juego
- Clean
- Architecture
✨ Clean
El arte de limpiar.
Clean literalmente traducido significa Limpio y tener algo limpio está totalmente relacionado con que esté ordenado. (aunque no es directamente proporcional pero definitivamente están relacionados)
Ordenar, poner cada cosa en su lugar.
Tu ropa tiene un lugar, las llaves de tu casa tienen un lugar, el cargador de tu celular tiene un lugar, y en medida que respetemos esto, nos traerá una multitud de beneficios.
😉 Encontrar tus llaves y/o cargador nunca más será un problema si todo tiene un órden.
Además traer más ropa a tu closet será mucho más sencillo de integrar si está correctamente ordenada.
En realidad relacionar el termino Clean del software con Órden me gusta mucho porque genera mucho valor. Así como los ejemplos que acabamos de ver parecen hacer tu vida más fácil, aplicar Clean a tus proyectos de software hace más fácil:
- Detectar y Resolver Bugs.
- Integrar nuevas características a tus proyectos.
- Optimizar tu equipo de desarrollo.
Si como programador pasas la mayor parte de tu tiempo leyendo código, desde luego vas a querer que todo lo que esté ahí sea lo más legible y ordenado posible. Esta es la escencia del uso de la palabra Clean en el Software.
Aplicar Clean a tus proyectos te llevará a hacer lo siguiente:
- Delegar responsabilidades – Ordenar.
- Ordenar nos llevará a separar y categorizar mejor.
3. El deseo de tener legibilidad nos hará colocar estándares para escribir código que nos permitan leer mejor y más rápido. Por ejemplo: Usar nombres que se puedan buscar y que sean habituales al negocio, evitar anidamiento excesivo, evitar clases muy largas, etc.
Robert C. Martín es el defensor del termino Clean, más o menos es el Marie Kondo del software.
Gracias a la influencia del Tío Bob, hoy sabemos que podemos aplicar Clean a tres cosas:
- Code 〰 Clean Code
- Architecture 〰 Clean Architecture
- Agile 〰 Clean Agile
Este capítulo habla especialmente sobre Clean Architecture y quiero centrarme meramente en ello. Escucha mi Podcast sobre 🎧 Clean Code Aquí
Pero ¿cómo podemos tener nuestro proyecto lo más Clean / Ordenado posible? Acompañame a ver el siguiente concepto.
👷♀️ Architecture
Arte y técnica de diseñar, proyectar y construir
Wikipedia
Literalmente el concepto de Arquitectura aplicado en la Construcción, el Diseño y el Arte, puede ser aplicado de la misma forma en el software.
Aplicar una arquitectura le da un sentido de proyección hacía el futuro a nuestros proyectos y aplicaciones.
Las preguntas serían: ¿Por qué quiero hacer esto? ¿Por qué es importante proyectar mi código? No debería enfocarme en que el código funcione? ¿Qué significa proyectar mi código hacia el futuro?
Como programadores tenemos dos trabajos:
- Hacer que el código funcione ✅
- Proyectarlo al futuro: hacerlo mantenible 🌠
(déjame en los comentarios si conoces una mejor palabra para describir esto)
Seguro pensabas que tu única responsabilidad era la número 1. no te preocupes antes yo también lo creía, lo importante es que estamos aprendiendo juntos.
Proyectar el código hacía el futuro es darle una estructura, es dárle el órden (Clean 😎) que se merece, para que implementar nuevas cosas y resolver bug’s sea lo más sencillo posible y con la menor cantidad de desarrolladores posibles.
Existen algunos modelos que nos ayudan a ordenar la estructura de nuestro código en Capas tal vez has escuchado el Modelo de Capas o Layers Model. Estos pueden ir desde tener una sola capa donde se concentre todo el código (por supuesto, nada clean/ordenado que proyecte nuestro código al futuro), hasta tener N capas.
Tío Bob nos recomienda estructurar / ordenar nuestro proyecto en 3 capas principales.
- Presentation: Interface de Usuario UI.
- Domain: Todas las reglas de negocio, también se llama business logic en inglés.
- Data: Todo lo que tega que ver con la persistencia de datos.
En los siguientes capítulos voy a presentarte todos cada uno de ellos a detalle.
👉Clean Architecture es:
La forma de ordenar y proyectar nuestro código hacia el futuro, para que añadir nuevas características y resolver bugs sea lo más simple posible con la menor cantidad de desarrolladores.