### Diseño Arquitectónico
* Arquitectura de Software
* Ventajas de la Arq. Explícita
* La Arq. y características del sistema
* Estructura del sistema
* Box y diagramas
* Decisiones de Diseño Arq.
* Reutilización de la Arq.
* Estilos Arquitectónicos
* Modelos Arquitectónicos
* Modelo Vista-Controlador
* Modelo Repositorio
* Modelo Cliente-Servidor
* Modelo de Capas
* Modelo de Tubería y Filtro
---
### Diseño Arquitectónico
Se refiere a la estructura y organización a gran escala de un sistema de software. Es la planificación de los componentes
principales de un sistema y la forma en que interactúan entre ellos. El diseño arquitectónico se enfoca en la visión
global del sistema, definiendo módulos, componentes, subsistemas, bases de datos, servidores y cómo todo se conecta y comunica.
----
### Diseño Arquitectónico: Ejemplo
- **Ejemplo:** Decidir si usar una arquitectura monolítica o una basada en microservicios.
- **Objetivo:** Crear una estructura robusta, escalable y eficiente que sirva de base para todo el sistema.
----
**Diseño Arquitectónico** y **Patrones de Diseño** NO son lo mismo.
----
### Patrones de Diseño
Son soluciones probadas y reutilizables para problemas comunes en el desarrollo de software a un nivel más detallado.
Estos patrones se aplican a problemas específicos dentro del código o en la interacción de ciertos componentes, y son
como "buenas prácticas" que se pueden seguir.
- **Ejemplo:** Patrones como Singleton, Factory, o Observer.
- **Objetivo:** Resolver problemas frecuentes de diseño en el nivel del código y mejorar la mantenibilidad y flexibilidad del software.
----
#### Diseño Arquitectónico vs. Patrones de Diseño
- **Escala:** El diseño arquitectónico trabaja a una escala más alta y global (visión del sistema completo), mientras que los patrones de diseño se centran en problemas más específicos y detallados dentro del código.
- **Finalidad:** El diseño arquitectónico es más estratégico y se refiere a la estructura general del sistema, mientras que los patrones de diseño son tácticos y se aplican a situaciones puntuales para mejorar la calidad del código.
---
### ARQUITECTURA DE SOFTWARE
* El diseño arquitectónico es un proceso de diseño que permite la identificación de los
sub-sistemas que componen un sistema y su comunicación
* El resultado de este proceso de diseño es una descripción de la arquitectura de software.
---
### DISEÑO ARQUITECTÓNICO
* Una fase temprana del proceso de diseño del sistema.
* Representa el vínculo entre los procesos de especificación y diseño.
* Suelen llevarse a cabo en paralelo con las actividades de algunas especificaciones.
* Se trata de identificar los principales componentes del sistema y sus comunicaciones.
---
##### Modelo Abstracto de arquitectura de un SISTEMA DE CONTROL DE ROBOT DE EMBALAJE

----
Las arquitetcuras de sistemas se moden con frecuenca usando diagramas de bloques simples:
- **Recuadros:** Componentes o sub-componentes
- **Flechas:** Datos o sañales de control.
----
### BOX Y DIAGRAMAS
* Muy abstracto - que no muestran la naturaleza de los componentes ni las relaciones de las
propiedades visibles externamente de los sub-sistemas.
* Sin embargo, útil para la comunicación con las partes interesadas y para la planificación de proyectos.
---
### VENTAJAS DE LA ARQUITECTURA EXPLÍCITA
* **Comunicación entre los stakeholders**: La arquitectura puede ser utilizada como un foco de discusión del sistema
por los stakeholders.
* **Análisis del sistema**: Analizar si el sistema puede
hacer frente a sus requerimientos no funcionales, como rendimiento, fiabilidad y mantenibilidad.
* **Reutilización a gran escala**: La arquitectura puede ser reutilizable a través
de una variedad de sistemas que poseen requerimientos similares.
* **Forma de documentación**: Se pueden visualizar componentes, interfaces y conexiones.
---
### DECISIONES DE DISEÑO ARQUITECTÓNICO
* Diseño arquitectónico es un proceso creativo, por lo que el proceso es diferente dependiendo del
tipo de sistema que se está desarrollado, antecedentes y experiencia del arquitetco.
* Es común una serie de decisiones, en todos los procesos de diseño.
----
### DECISIONES DE DISEÑO ARQUITECTÓNICO
1. ¿Existe una arquitectura de aplicaciones genéricas que se pueden utilizar?
2. ¿Cómo se distribuirá el sistema a través de núcleos y procesadores?
3. ¿Qué estilos arquitectónicos son apropiados?
4. ¿Qué enfoque se utilizará para la estructura del sistema?
5. ¿Cómo el sistema se descompone en módulos?
6. ¿Qué estrategia de control se debe utilizar para los componentes?
7. ¿Cuál arquitetcura es mejor en base a los requerimientos no funcionales?
8. ¿Cómo el diseño arquitectónico se evaluará?
9. ¿Cómo debe ser documentada la arquitectura?
---
### ARQUITECTURA y requerimientos NO funcionales
1. **Rendimiento:** Reducir al mínimo las operaciones de comunicaciones. Uso de grano grueso en lugar de
componentes de grano fino.
2. **Seguridad:** Una arquitectura con los procesos críticos en las **capas** interiores.
3. **Protección:** La protección se debe ubicar en pocos componentes individuales, para reducir validaciones.
4. **Disponibilidad:** Incluir componentes redundantes y los mecanismos de tolerancia a fallos.
5. **Mantenibilidad:** Uso de grano fino, los componentes reemplazables.
----
Algunos requerimientos se "contradicen" entre si, como el **rendimiento** que requiere componentes de grano grueso y
la **mantenibilidad** que requiere componentes de grano fino. Por eso debe encontrarse una **solución de compromiso**.
----
Es imposible representar toda la información relevante sobre la arquitectura de un sistema en un solo modelo arquitectónico,
ya que cada uno presenta una perspectiva del sistema.
---
### Vistas Arquitectónicas
1. **Vista Lógica:** Abstracciones como objectos o clases de objectos.
2. **Vista de Proceso:** Muestra como en tiempo de operación los componentes interactuan. (rendimiento y disponibilidad)
3. **Vista de Desarrollo:** Muestra como el software está descompuesto
4. **Vista Física:** Expone el hardware del sistema y como los componentes de software se distribuyen en los procesadores.
5. **Vista Abstracta:** Descomponer los requerimientos de alto nivel en especificaciones detalladas.
---
### ESTRUCTURA DEL SISTEMA
* Concerniente a la descomposición del sistema en sub-sistemas.
* El diseño arquitectónico se expresa normalmente como un diagrama de bloques que presentan un
panorama general de la estructura del sistema.
* Modelos más específicos muestran cómo los sub-sistemas comparten los datos, se distribuyen y la
interfaz con los demás también pueden ser desarrollados.
---
### REUTILIZACIÓN DE LA ARQUITECTURA
* Sistemas en el mismo dominio a menudo tienen arquitecturas similares que reflejan conceptos del dominio.
* La aplicación de líneas de producción se construye en torno a un núcleo con arquitectura
particular, con variantes que satisfagan las necesidades del cliente.
---
### ESTILOS ARQUITECTÓNICOS
* El modelo arquitectónico de un sistema puede ajustarse a un modelo genérico o estilo arquitectónico.
* La conciencia de estos estilos puede simplificar el problema de la definición de arquitecturas de sistemas.
* Sin embargo, la mayoría de los grandes sistemas son heterogéneos y no siguen un mismo estilo arquitectónico.
----
### ESTILOS ARQUITECTÓNICOS
- Un conjunto de componentes.
- Un conjunto de conectores entre componentes (comunicación, coordinación, cooperación, etc.).
- Restricciones que definen cómo se integran los componentes para formar el sistema.
- Modelos que permiten comprender las propiedades de un sistema general.
----
### ¿Cómo elegir un estilo de arquitectura?
* Ventajas
* Desventajas
* Contexto
---
### MODELOS ARQUITECTÓNICOS
* Utilizarse para documentar un diseño arquitectónico.
* Modelo estructural estático, que muestra los principales componentes del sistema.
* Modelo de proceso dinámico que muestra el modelo de proceso de la estructura del sistema.
* Modelo de interfaz que define las interfaces de sub-sistemas.
* Modelo de relaciones, como un modelo de flujo de datos que muestra las relaciones de sub-sistemas.
* Modelo de distribución que muestra cómo los sub-sistemas se distribuyen a través de computadoras.
---
### MODELOS Arquitectónicos
1. Arquitectura en Capas
2. Arquitectura Cliente-Servidor
3. Arquitectura de Microservicios
4. Arquitectura de Capas N
5. Arquitectura Orientada a Servicios
6. Arquitectura Basada en Eventos
7. Arquitectura de Tubería y Filtro
8. Arquitectura de Espacio de Nombres
9. Arquitectura de Sistema Distribuido
10. Arquitectura Monolítica
11. Arquitectura de Microkernel
12. Arquitectura Hexagonal
----
### MODELOS Arquitectónicos
13. Arquitectura basada en Componentes
14. Arquitectura de Peer-to-Peer
15. Arquitectura CQRS (Command Query Responsibility Segregation)
16. Arquitectura Basada en Nubes
17. Arquitectura de Repositorio
18. Modelo-Vista-Controlador
19. Arquitectura de Máquina de Estados
20. Arquitectura Orientada a Objetos
21. Arquitectura Broker (intermediario)
22. Arquitectura Master-Slave
23. Arquitectura Serverless
----
Al leer sobre cada Arquitetcura plantea si es Jerarquico o No Jerarquico
----
Estos modelos proporcionan distintas formas de organizar y estructurar un sistema de software según los requisitos del
proyecto. La elección del modelo depende de factores como la escalabilidad, mantenimiento, distribución, complejidad y
el tipo de problema que se está resolviendo.
---
### 1. Arquitectura en Capas
* Divide el sistema en capas o niveles donde cada capa tiene una responsabilidad específica.
* La comunicación entre capas se da de manera jerárquica: una capa superior utiliza los servicios de una capa inferior.
* Las capas de nivel inferior representan servicios núcleo que es probable se utilicen a lo largo de todo el sistema.
----
### 1. Arquitectura en Capas: USO
* Al construirse nuevas facilidades encima de los sistemas existentes.
* Cuando el desarrollo se dispersa a través de varios equipos de trabajo, y cada uno es responsable de una capa de funcionalidad.
* Cuando exista un requerimiento para seguridad multinivel.
----
### 1. Arquitectura en Capas: Ventajas
- Separación de preocupaciones: Cada capa tiene una responsabilidad bien definida.
- Mantenibilidad: Los cambios en una capa no afectan directamente a otras capas.
- Reusabilidad: Las capas pueden ser reutilizadas en diferentes sistemas.
----
### 1. Arquitectura en Capas: Desventajas
- Rendimiento: Puede haber overhead (sobrecarga) al pasar los datos a través de múltiples capas.
- Rigidez: Puede ser difícil cambiar una capa sin afectar a las demás.
----
### 1. Arquitectura en Capas: Ejemplo
Aplicaciones web que tienen capas de presentación, lógica de negocio y acceso a datos.
----
### 1. SISTEMA DE GESTIÓN

----
### 1. SISTEMA DE BIBLIOTECA

----
### Arquitectura de sistema de información en capas

----
### Arquitectura del MHC-PMS

---
### 2. Arquitectura Cliente-Servidor
* Sistema distribuido que muestra cómo el modelo de datos y procesamiento se distribuye a través
de una gama de componentes.
* Conjunto de servidores independientes que ofrecen servicios específicos, tales como la
impresión, gestión de datos, etc
* Conjunto de clientes que envian solicitudes a éstos servidores, que los procesan y responden con los resultados.
* Red que permite a los clientes acceder a los servidores.
----
### 2. Arquitectura Cliente-Servidor: Evolución