Categorías
Desarrollo Diseño

Calidad en el Software. 3de3 – Arquitectura.

Y llegamos al último post de la serie, me voy a atrever a dar unas pinceladas de arquitectura de Software. 🙈

Anteriormente, hable del diseño de bajo nivel y medio, es decir, de los principios y buenas prácticas en el código, los clean code del Tío bob y los code smells de Fowler. Tan importantes para que el código sea fácil de leer, entender, mantener y libre de errores comunes, por lo tanto, aumentar la calidad. En el mundo del diseño medio, debemos conocer cómo las clases se relacionan entre sí y soluciones tipo para problemas comunes y recurrentes, los patrones de diseño nos ayudan a garantizar un buen diseño y por lo tanto de calidad.

Arquitectura

Ahora vamos a por el diseño de más alto nivel, la arquitectura. Es plantearnos cómo organizamos todas esas clases en agrupaciones y cómo se relacionarán entre sí. Vamos, hablamos de paquetes de clases, componentes y sus relaciones.

Hay dos grandes clasificaciones de tipos de arquitecturas, la de sistema y la del software. Cuando hablamos de sistema, nos referiremos a los componentes, que son las unidades de despliegue, los binarios que finalmente se despliegan en un equipo para ser utilizado. Y cuando nos referimos a la del software, pues los paquetes en los que hemos organizado el software.

Pensar y pintar la estructura de estos paquetes va a repercutir en que nuestro código tenga más calidad, para empezar, podremos analizar y dialogar con el resto del equipo ¡casi nada!

Podremos plantearnos responder a muchas preguntas:

¿Si cambio este paquete a quién afecta? ¿Cuantos test tengo que lanzar si cambio este paquete? ¿Cuántas dependencias de entrada? ¿Y de salida? ¿Tengo ciclos? Si quiero agregar una nueva funcionalidad, ¿Cuántos paquetes tengo que tocar? ¿Por qué? ¿Podemos mejorarlo?…

Ya existen un grupo de patrones arquitectónicos sobre los que comenzar a trabajar. Y como los patrones de diseño, es raro que un proyecto tenga una única arquitectura, lo normal es que se combinen varias. La arquitectura Modelo-Vista-Controlador, es quizás la más común pero puede perfectamente puede ser una parte de una composición mayor basada en una arquitectura de microservicios o micro frontend.

Algunos libros interesantes son:

Patterns of Enterprise Application Architecture

De Martin Fowler, uno de los grandes cracks, conocido por su libro de refactoring (comentado en el post anterior), ser uno de los que más han tratado el tema de la integración continua, patrones arquitectónicos MV*, y mil aportaciones más…

https://martinfowler.com/architecture/

En este libro, habla con mucha profundidad de la arquitectura de capas, y nos ayuda a identificar y aprender a acotar lo que es dominio, los datos, la presentación y el comportamiento… ¿Hola MVC?

Software Architecture Patterns

Aprenderás sobre arquitecturas:

  • Capas
  • Orientadas a eventos
  • Microkernel
  • Microservicios
  • Cloud o Space-based

Se lee muy rápido, es cortito y aporta bastante.

Vista 4+1

Y ahora toca pintar y documentar todo esto, es importante, ya que cuando todo se complique, la calidad caerá en picado si no tienes un buen mapa. Un modelo sencillo y muy práctico es la vista 4+1

https://es.wikipedia.org/wiki/Modelo_de_Vistas_de_Arquitectura_4%2B1

Se puede resumir que:

  1. En los Escenarios pintarás los casos de uso.
  2. En la vista lógica, la estructura de la arquitectura y diseño de nivel medio, paquetes, clases y los diagramas con los que entender sus relaciones y comportamientos. Aquí hay mucho de diseño medio y algo de arquitectura
  3. La vista de proceso, pondremos los diagramas que nos expliquen cómo funciona el sistema en tiempo de ejecución
  4. En la vista de desarrollo, pondremos los componentes y los paquetes que los componen. Esto es arquitectura
  5. Y en la física, hablamos de máquinas, cables, …

Si utilizas staruml como modelador de UML, dispone de una plantilla que ya te crea la estructura básica para implementarla.

¡A darle caña! 💪

Deja una respuesta

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