Introducción al curso

1

Diseño y Documentación de Arquitectura de Software

Atributos de calidad

2

Atributos de Calidad en Sistemas: Definición y Medición

3

Idoneidad Funcional: Completitud, Exactitud y Pertinencia

4

Eficiencia de Ejecución en Sistemas Informáticos

5

Compatibilidad en Sistemas: Interoperabilidad y Coexistencia

6

Subcaracterísticas de Usabilidad en Desarrollo de Software

7

Confiabilidad de Sistemas: Madurez, Disponibilidad, Resiliencia y Recuperación

8

Seguridad de Usuarios en Desarrollo de Software

9

Subcaracterísticas de Mantenibilidad en Sistemas de Software

10

Medición de Adaptabilidad en Sistemas de Software

11

Relación y Tensión entre Atributos de Calidad en Sistemas de Software

12

Atributos de Calidad en Arquitectura de Software

Patrones de arquitectura

13

Patrones de Arquitectura Monolítica y Distribuida

14

Modelo Vista Controlador: Separación de Responsabilidades en Aplicaciones

15

Arquitectura de Capas: Diseño y Comunicación entre Niveles

16

Patrones de Arquitectura Orientada a Eventos y Event Sourcing

17

Patrón de Arquitectura MicroKernel y su Implementación en IDEs

18

Arquitectura "Comparte Nada": Optimización y Procesamiento de Datos

19

Patrón de Microservicios en Arquitectura de Software

20

Patrón CQRS para Separación de Consultas y Comandos

21

Arquitectura Hexagonal: Diseño y Aplicación Práctica

22

Diseño Orientado al Dominio: Conceptos y Aplicaciones Prácticas

23

Patrones de Arquitectura para Aplicaciones Escalables y Modulares

24

Patrones de Arquitectura en Proyectos de Crecimiento Empresarial

Diseño de una arquitectura

25

Diseño de Arquitecturas a Medida: Herramientas y Estrategias

26

Tipos de Conectores en Arquitectura de Software

27

Conectores Asíncronos y Sincrónicos: Implementación y Uso Práctico

28

Diferencias entre Enrutadores y Difusores en Comunicación de Mensajes

29

Conexión de Productores y Consumidores con Colas de Mensajes

30

Framework de Diseño Orientado a Atributos: Escenarios y Tácticas

31

Tácticas para Mejorar la Disponibilidad de Sistemas

32

Tácticas para Mejorar la Disponibilidad del Sistema

33

Tácticas para Mejorar la Mantenibilidad del Software

34

Prevención de Efectos Dominó en Mantenibilidad de Software

35

Estrategias para Mejorar la Eficiencia de Ejecución en Sistemas

36

Tácticas de Seguridad Informática para Detectar, Resistir y Recuperarse de Ataques

37

Estrategias para Mejorar la Capacidad de Prueba de Software

38

Tácticas de Usabilidad en Diseño de Interfaces de Usuario

39

Validación de Arquitectura con ATAM y Métricas de Calidad

40

Diseño de Arquitectura para Startups y Empresas Escalables

Modelado y documentación de arquitectura

41

Documentación Efectiva de Arquitectura de Software

42

Sincronización de Modelos de Arquitectura y Código Fuente

43

Evaluación de Atributos de Calidad en Arquitectura de Software

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Arquitectura de Capas: Diseño y Comunicación entre Niveles

15/43
Recursos

Nos plantea una separación en capas en donde cada capa representa alguno de los dominios de nuestra aplicación.

Aportes 24

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

¿Cuándo es que nos referimos a un patrón de diseño o a un patrón de arquitectura de software?

Para saber si un patrón es de arquitectura este debería contemplar:

  • Tener un conjunto de patrones y abstracciones coherentes que proporcionan un marco definido y claro para interactuar con el código fuente del software.

  • El diseño del sistema en base a objetivos (requisitos) y restricciones.

  • Define los componentes que llevan a cabo alguna tarea de computación, sus interfaces y la comunicación entre ellos. Toda arquitectura debe ser implementable en una arquitectura física, que consiste simplemente en determinar qué computadora tendrá asignada cada tarea

Tomando estos argumentos sacados de diversas fuentes entiendo que: Patrón por capes hace más referencia a Diseño que a arquitectura de software.

¿Qué opinan?

Saludos !
Mauricio

<h3>Patrones: Capas / Layered</h3>

Cada capa va hacer responsable de cierto componente global de aplicación. La comunicación siempre es de arriba hacia abajo. nunca una capa muy inferior debería comunicarse con la del primer nivel.


Se pueden utilizar en sistema distribuidos.

PresentationDomainDataLayering by Martin Fowler: https://martinfowler.com/bliki/PresentationDomainDataLayering.html

Patrón de arquitectura Capas
Separación en capas, donde cada una es responsable de cierto concepto global de la aplicación.
La cantidad de capas depende de cada aplicación.
Es común ver 3 o 4 capas
La comunicación siempre debe ser de arriba hacia abajo

La arquitectura en capas se implementa en un monolito. La arquitectura resultante se despliega toda junta

El patrón por capas, es el mas usado como base. Junto con este se implementan adicional otro patrones. Una buena propuesta de Arquitectura con N Capas es el propuesto por microsoft en el siguiente libro: Guía de Arquitectura de N-Capas orientada al Dominio con .NET 4.0

Pregunta de examen:

El patrón de arquitectura de capas describe una estructura tal que:

Quizá como extra, hacer entender que el servicio, en el ejemplo CartService viene siendo un caso de uso. Es decir, es un workflow completo y generalmente aislado. En este punto es donde normalmente se deberían hacer validaciones de negocio (limites de compras, limite del total, etc).

Algunos puntos importantes del patrón de arquitectura o patrón de diseño de capas.

¿Cuándo es que nos referimos a un patrón de diseño o a un patrón de arquitectura de software?

  • ¿Porqué usa este patrón?: Tiene muy buenas prestaciones de mantenibilidad
Ejemplo del directorio de archivos del e-commerce con la arquitectura de capas: /ecommerce-app │ ├── /src │ ├── /presentation │ │ ├── /controllers │ │ │ ├── AuthController.js # Controlador para autenticación de usuarios │ │ │ ├── ProductController.js # Controlador para productos │ │ │ ├── CartController.js # Controlador para el carrito │ │ │ └── OrderController.js # Controlador para pedidos │ │ ├── /views │ │ │ ├── /auth │ │ │ │ ├── login.ejs # Vista para login │ │ │ │ └── register.ejs # Vista para registro │ │ │ ├── /products │ │ │ │ ├── index.ejs # Vista para listar productos │ │ │ │ └── show.ejs # Vista para mostrar detalles del producto │ │ │ └── /cart │ │ │ ├── index.ejs # Vista para mostrar carrito │ │ │ └── checkout.ejs # Vista para pago │ │ └── /routes │ │ ├── authRoutes.js # Rutas para autenticación │ │ ├── productRoutes.js # Rutas para productos │ │ ├── cartRoutes.js # Rutas para el carrito │ │ └── orderRoutes.js # Rutas para pedidos │ ├── /application │ ├── /services │ │ ├── AuthService.js # Lógica de negocio para autenticación │ │ ├── ProductService.js # Lógica de negocio para productos │ │ ├── CartService.js # Lógica de negocio para el carrito │ │ └── OrderService.js # Lógica de negocio para pedidos │ └── /dtos │ ├── UserDTO.js # Objeto de Transferencia de Datos para el usuario │ ├── ProductDTO.js # DTO para producto │ └── OrderDTO.js # DTO para pedido │ ├── /domain │ ├── /models │ │ ├── User.js # Modelo de dominio para usuarios │ │ ├── Product.js # Modelo de dominio para productos │ │ ├── Cart.js # Modelo de dominio para carrito │ │ └── Order.js # Modelo de dominio para pedidos │ ├── /repositories │ │ ├── UserRepository.js # Repositorio para usuarios │ │ ├── ProductRepository.js # Repositorio para productos │ │ ├── CartRepository.js # Repositorio para el carrito │ │ └── OrderRepository.js # Repositorio para pedidos │ └── /entities │ ├── UserEntity.js # Entidad de usuario │ ├── ProductEntity.js # Entidad de producto │ ├── CartEntity.js # Entidad de carrito │ └── OrderEntity.js # Entidad de pedido │ ├── /infrastructure │ ├── /database │ │ ├── db.js # Configuración de la base de datos │ │ ├── UserSchema.js # Esquema de base de datos para usuario │ │ ├── ProductSchema.js # Esquema de base de datos para productos │ │ ├── CartSchema.js # Esquema de base de datos para carrito │ │ └── OrderSchema.js # Esquema de base de datos para pedidos │ ├── /services │ │ ├── PaymentGateway.js # Implementación de un servicio de pasarela de pagos │ │ └── EmailService.js # Servicio para enviar correos electrónicos │ └── /migrations │ └── initialMigration.js # Archivo de migración inicial para la base de datos │ ├── /config │ ├── config.js # Configuraciones generales del proyecto (puerto, claves, etc.) │ └── db.config.js # Configuración específica de la base de datos │ ├── /middlewares │ ├── authMiddleware.js # Middleware para proteger rutas privadas │ └── errorHandler.js # Middleware para manejar errores │ ├── /public │ ├── /css │ │ └── styles.css # Archivos CSS │ ├── /images │ │ └── logo.png # Imágenes del sitio │ └── /js │ └── scripts.js # Archivos JavaScript del frontend │ ├── app.js # Punto de entrada de la aplicación ├── package.json # Dependencias del proyecto └── README.md # Documentación del proyecto Explicación: 1. **Presentación (Presentation):** * Aquí se encuentran los controladores, vistas y rutas, lo que corresponde a la interacción directa con el usuario. La capa de presentación es responsable de recibir las peticiones y devolver las respuestas. * Las **vistas** (en este caso usando EJS) se encargan de generar la interfaz de usuario que se presenta en el navegador. 2. **Aplicación (Application):** * Esta capa contiene los **servicios** que manejan la lógica de negocio. Son los encargados de coordinar las operaciones entre la capa de presentación y la capa de dominio. Aquí se maneja toda la lógica de procesamiento de datos y validación. * Los **DTOs (Data Transfer Objects)** son utilizados para transferir datos entre las capas y para garantizar que solo la información relevante sea pasada entre ellas. 3. **Dominio (Domain):** * Es la parte central de la aplicación y contiene las **entidades** y **modelos de dominio**, que representan los conceptos fundamentales del negocio (usuarios, productos, pedidos). * Los **repositorios** son responsables de interactuar con las bases de datos u otras fuentes de datos externas y devolver las entidades de dominio. Esta capa es independiente de la infraestructura de datos específica. 4. **Infraestructura (Infrastructure):** * Aquí se encuentran las implementaciones específicas de servicios externos (como bases de datos o pasarelas de pago) que se utilizan para la persistencia de datos y comunicación con otros sistemas. * También incluye la configuración de la base de datos y los esquemas utilizados en las migraciones de la base de datos. 5. **Config:** * Archivos de configuración global del proyecto, incluyendo configuraciones de la base de datos, claves secretas, puertos, etc. 6. **Middlewares:** * Esta capa incluye middlewares personalizados, como la autenticación para proteger rutas y el manejo de errores para capturar excepciones a nivel global. 7. **Public:** * Contiene archivos estáticos que son accesibles directamente desde el navegador (CSS, JavaScript, imágenes). 8. **app.js:** * El archivo principal que inicia la aplicación, configurando las rutas, middlewares, y el servidor web.

Hace tiempo le pregunté a mis seniors qué tipo de patrón estábamos usando, nunca me supieron contestar que era por capas. He aquí la importancia de tomar cursos como este en el que aprendemos conceptos y no hacemos las cosas por hacer.

Las 4 capas más comúnmente encontradas de un sistema de información general son las siguientes.

  • Capa de presentación (también conocida como capa UI )

  • Capa de aplicación (también conocida como capa de servicio )

  • Capa de lógica de negocios (también conocida como capa de dominio )

  • Capa de acceso a datos (también conocida como capa de persistencia )

Creo que estaría bueno tener presente los conceptos DAO y a su vez DTO. Y el rol de repository como patron y como un patron active record en si puede generar ventajas y desventajas…

Este patrón se puede utilizar para estructurar programas que se pueden descomponer en grupos de subtareas, cada una de las cuales se encuentra en un nivel particular de abstracción. Cada capa proporciona servicios a la siguiente capa superior.

Apuntes:

Capas

Plantea una separación de capas en la que cada capa va a ser responsable de cierto concepto global de la aplicación.

La comunicación entre capas se debe hacer de arriba hacia abajo.

Nota: La capa de Dominio en otros lugares se le conoce como la capa de lógica de negocios