Wiki Patrones en Arquitectura de Software

**¡Bienvenidos a Wiki Patrones en Arquitectura de Software!**

# Patrón por capas

Es uno de los patrones más usados en el desarrollo de sistemas, su funcionalidad se basa en distribuir tareas o responsabilidades en diferentes partes o capas donde las capas inferiores proporcionan la información necesaria a la capa superior o superiores, por ende, las capas superiores dependen de las inferiores. Podríamos decir que la forma en que está constituido este patrón es muy similar a un edificio de varios pisos, donde la primera planta sienta las bases para las de arriba, no pueden existir plantas superiores sin una inferior.

Las capas principales de este patrón suelen ser: capa de presentación, donde está la interfaz del usuario; capa de aplicación, donde se ubican los servicios; capa de persistencia o capa de dominio, donde suele ir la lógica del negocio y la capa de datos, donde se almacena la información.

Su uso se aplica a aplicaciones de escritorio o aplicaciones web o móviles, como aplicaciones que hacen un gran uso de base de datos, puesto que permite una buena administración del software en caso de requerir mantenimiento, ya que al ser capas diferentes presentan una alta cohesión, pero bajo acoplamiento así que no son totalmente dependientes la una con la otra, y esto permite la rápida corrección de errores sin afectar las demás capas.

*Vista de cómo está estructurado un patrón por capas en la vida real*

*Arquitectura y comunicación en el patrón por capas*

*Nota*. La imagen muestra la comunicación básica entre capas, donde la capa superior hace una petición a la de abajo y así sucesivamente hasta encontrar la información solicitada y luego devolver dicha información a la primera capa, encargada de mostrar la información.

# Patrón de modelo-vista-controlador

El modelo vista controlador o MVC se divide en tres partes, el modelo que contiene las funciones o lógica de los datos, la vista donde se aloja la interfaz de usuario y el controlador que básicamente da instrucciones al modelo y a la vista y hace de puente entre los otros dos elementos.

Como se decía, el modelo se encarga de administrar los datos de la aplicación, haciendo peticiones a la base de datos o recibiendo información de alguna API; la vista que estará compuesta de diversos elementos interactivos con los cuales el usuario podrá visualizar la información así como hacer peticiones de algún tipo y por último el controlador que administra los datos necesarios para el funcionamiento esperado, siendo así que este vendría a ser el medio por el cual la vista y el modelo interactúan.

Se aplica a aplicaciones web, como móviles y de escritorio, puesto que permite una buena separación del desarrollo backend y frontend lo que permite un desarrollo en paralelo y que al hacer algún tipo de mantenimiento este se pueda hacer sin afectar a su contraparte.

*Estructura y comunicación del patrón MVC*

*Relación del usuario mediante una estructura MVC*

# Patrón de interprete

Por medio de este patrón es posible desarrollar algún tipo de programa que descifre información en un texto o lenguaje de programación como java, su método de descifrado se basa en interpretar ciertas expresiones o símbolos.

Básicamente para evaluar cada línea de código o simbología en un lenguaje es necesario crear clases enfocadas a ello, lo cual resulta en uno de los patrones más complejos debido a la implementación de diversas técnicas de POO avanzada.

Los componentes de este patrón son; Client, que es el que da las instrucciones para la operación; Context, el cual se encarga de leer y almacenar la información en las clases y luego ser replicada; AbstarctExpression, es al interfaz mínima para definir una expresión a un grado mínimo; TerminalExpression, son aquellas expresiones cuya continuidad finaliza al ser evaluadas, por lo que marcan el final de un sub-árbol de expresión; NonTerminalExpression, son expresiones que contienen una continuidad y por ende poseen más expresiones a ser evaluadas hasta hallar una expresión terminal.

Su uso se aplica al desarrollo de traductores, lenguajes para describir protocolos de comunicación o interpretar comandos en un lenguaje como SQL, básicamente este patrón es el ideal para interpretar lenguajes de programación y poder analizar y ejecutar instrucciones de un lenguaje.

*Diagrama de clases de un programa fundamentado en el patrón interprete*

# Patrón maestro esclavo

El Patrón Maestro – Esclavo es una forma de arquitectura fundamental, ya que es utilizado cuando se tienen dos o más procesos que deben ejecutarse en forma simultanea y continua, pero a diferentes velocidades, es decir que este patrón maneja múltiples bucles paralelos y es usado exactamente para aplicaciones multitarea.

En estos casos mientras los bucles paralelos están sucediendo, uno de ellos actúa como maestro controlando los bucles esclavos y comunicándose con ellos mediante mensajería. Es muy usado por ejemplo en los controles de interfaz de usuarios mientras se recopilan datos simultáneamente o para replicaciones en una base de datos, dónde la maestra es la base autorizada y las esclavas se sincronizan con ella.

Lo más importante de este patrón es justamente es el control de la administración del tiempo de su aplicación. Ya qué si bien cada ciclo es paralelo se tratan como tareas independientes que actúan de manera simultanea.

# Patrón pizarra

Es un modelo de arquitectura de software que se utiliza en sistemas multiagentes dónde no se conoce una estrategia o solución determinada. Esta estructura consta de 3 componentes principales:

·   La pizarra: Es la memoria e interfaz dónde se lee y escribe.

·   La fuente de conocimiento: Son módulos especializados que aportan hipótesis de las posibles soluciones, son los que leen y escriben en la pizarra.

·   El componente de control: Monitorea lo que sucede en la pizarra y toma decisiones.

Todos los componentes tienen acceso a la pizzara, los mismo cuenta con una tarea concreta y cooperan para alcanzar una meta común. Los mismos componentes pueden generar nuevos objetivos que se agreguen a la pizarra. La dinámica de este sistema es que cualquiera puede examinar la pizzara que inicialmente planteara un problema y brindar soluciones, a partir de los apuntes allí adjuntos otros agentes pueden dar continuidad con el proceso y escribirlo nuevamente en la pizarra para la observación general.

Es usado generalmente para reconocimiento de voz, identificación y seguimiento de vehículos.

De esta manera se coordinan diferentes agentes y facilita la comunicación entre ellos.

# **Referencias bibliográficas**

           Sommerville I, (2011) Ingeniería de Software. (9a ed.) Madrid: Pearson education.

           Platzi. (2020). *Patrón Arquitectónico de Capas / Layers.* https://platzi.com/tutoriales/1248-pro-arquitectura/5439-patron-arquitectonico-de-capas-layers/

           LinkedIn. (28 de febrero de 2023). *Patrones en la Arquitectura de Software.* https://es.linkedin.com/pulse/patrones-en-la-arquitectura-de-software-elmo-renato-castro-ramirez

           CTRL-Y. (27 de marzo de 2021). *Arquitectura de capas para NodeJs.* https://ctrly.blog/es/arquitectura-capas/

           FreeCodeCamp. (28 de junio de 2021).  *El patrón modelo-vista-controlador: Arquitectura y frameworks explicados*. https://www.freecodecamp.org/espanol/news/el-modelo-de-arquitectura-view-controller-pattern/

           Oscar Blancarte. (2021). *Interpreter.* https://reactiveprogramming.io/blog/es/patrones-de-diseno/interpreter

           Knowledge (2023) *Patrones de diseño de aplicaciones: maestro / esclavo.* https://knowledge.ni.com/KnowledgeArticleDetails?id=kA03q000000x1r9CAA

           (Aprendiendo Arquitectura Software, 2018) https://aprendearquitecturasoftware.wordpress.com/2018/10/05/patron-pizarra-blackboard-grupo-8/

           (Huaman, 2018) https://medium.com/@maniakhitoccori/los-10-patrones-comunes-de-arquitectura-de-software-d8b9047edf0b#:~:text=6.-,Patrón%20de%20igual%20a%20igual,proporcionando%20servicios%20a%20otros%20pares

*Fundadores de la comunidad*: Linda Carolina Zambrano León y Jose Luis Rodriguez Castillo.

Realizado para Facultad de Ingeniería de Software, Corporación Universitaria Iberoamericana

Arquitectura de software