Estimados devs, entiendo su frustración, sí, 🤣 y es que se nos complica a veces entender estos temas, y por eso no es casualidad que este sea el tercer post en este blog acerca del tema, si tienes tiempo te invito a leer estos otros dos: Patrones de diseño de software y su aplicación y Arquitectura de software y su diferencia con los patrones de diseño.
Pero me tomé el tiempo de entender el porqué muchas veces no se tiene clara esta idea, que se supone debería estar muy bien definida, y la respuesta es: la falta de consenso.
Lo primero es determinar los conceptos a analizar y son 3: Patrones de diseño, patrones de arquitectura y estilo de arquitectura.
Hablar de una arquitectura de software y patrón de arquitectura es lo mismo, no te compliques más 😉
Empecemos, este blog es pragmático así que veamos un ejemplo, y tomaré a MVC para este efecto, has escuchado hablar de él? Seguro que sí, te pregunto entonces, sabes qué es? un patrón, un estilo, una arquitectura? Aquí es donde se pone un poco compleja la cuestión, veamos la definición de MVC en tres fuentes respetadas en Internet:
MDN Web Docs de Mozilla
MVC es un patrón en el diseño de software comúnmente utilizado para implementar interfaces de usuario, datos y lógica de control.
Fuente
Universidad de Alicante
MVC es un estilo de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos.
Fuente
La confiable Wikipedia
MVC es un patrón de arquitectura de software, que separa los datos y principalmente lo que es la lógica de negocio de una aplicación de su representación y el módulo encargado de gestionar los eventos y las comunicaciones.
Fuente
Si fuentes confiables no se logran poner de acuerdo, entonces queda más claro porqué los developers tampoco pues 😅 y esto no es una crítica en sí, sino mas bien un intento por entender las razones de algo, así dejaremos de sentirnos culpables por no entender algo o no saber explicarlo bien.
Sin embargo, hay otro motivo más por qué no queda tan claras las definiciones y es que estos tres temas, tanto el patrón de diseño, estilo de arquitectura y arquitectura propiamente dicha y es que todas ellas comparten elementos entre sí y se complementan, es por eso que para algunos una definición caiga más en un terreno y para otros en un contexto y realidad distinta se apegue más a otro terreno, pero eso no hace las definiciones incorrectas de por sí.
Muy bien ya entendimos el por qué, ahora resta entender el qué es y qué no es cada uno de ellos, para poder tener las cosas más claras, y decantarnos por una definición que sea razonablemente aceptada como un estándar y práctica tanto para nosotros como para la industria del software.
Estilos de Arquitectura
Nos indica a un muy alto nivel cómo organizar nuestro código, cómo definir las capas o módulos que tendrá nuestra aplicación asímismo como interactúan entre sí.
Listado de algunos de los estilos más conocidos:
- Monolítica
- Cliente-Servidor
- Orientado a servicios
- Por capas
- De plug-in
- P2P
Ahora vamos por los patrones
Es oportuno indicar que en software un patrón es una solución recurrente a un problema recurrente
Arquitecturas o patrones de Arquitectura
Este concepto está ligado al anterior ya que estos patrones de arquitectura van a resolver los posibles problemas causados por usar un estilo de arquitectura y se enfoca en la estructura del sistema entero, sus componentes y la relación entre ellos, todo a un alto nivel es decir un nivel macro.
Tenemos por ejemplo a:
- SOA
- Microservicios
- N-Capas, 3-capas
- MVC
- Microkernel
- REST
Patrones de Diseño
De forma similar a un patrón de arquitectura, también son soluciones y técnicas comprobadas para resolver problemas comunes, pero su diferencia radica en el ámbito en el que éstas soluciones son aplicadas, mientras que una arquitectura brinda soluciones a nivel del proyecto entero, los patrones de diseño brindan esa solución a nivel de código, es más focalizado.
Tenemos algunos patrones aquí:
- Factory method
- Singleton
- Prototype
- Facade
- Observer
- Strategy
- Memento
- Repository
- DTO
Una lectura recomendada sobre estos temas son los libros de mi buen amigo Oscar Blancarte, por ejemplo este libro el cual me agradó.
Así que crack ahora espero haber contribuido en algo a formarte una mejor idea de estos conceptos tan ligados a nuestra profesión, así podrás aplicarlo en tu chamba y mejor aún cuando te entrevisten puedas dar una respuesta con sustento que te acerque más a ese trabajo que tanto anhelas.
Éxitos crack y comparte el conocimiento si te ha gustado 😉