03_Unidad3_DisenioArquitectonico - vhcontre/inventario-2025 GitHub Wiki
🧱 Diseño Arquitectónico y Patrones de Software
🎯 Objetivos
- Comprender los conceptos fundamentales del diseño arquitectónico en software.
- Conocer patrones de diseño aplicables a la ingeniería de software moderna.
- Aplicar buenas prácticas de arquitectura y diseño en proyectos académicos.
🏗️ ¿Qué es la arquitectura de software?
La arquitectura de software define la estructura general del sistema: sus componentes principales, cómo se comunican entre sí y cómo se organizan.
Permite tomar decisiones estratégicas que impactan en la escalabilidad, mantenibilidad, seguridad y reutilización del software.
Principios arquitectónicos clave:
- Separación de responsabilidades (SoC)
- Bajo acoplamiento y alta cohesión
- Modularidad
- Abstracción e interfaces claras
🧭 Estilos arquitectónicos comunes
Estilo | Descripción | Ejemplo común |
---|---|---|
Monolítico | Una sola unidad desplegable | Aplicaciones simples |
Cliente–Servidor | Interacción entre frontend y backend | Web apps modernas |
Microservicios | Componentes independientes que se comunican vía API | Sistemas distribuidos |
En capas (Layered) | Separación por funciones: presentación, lógica, datos | MVC, Clean Architecture |
Event-driven | Basado en eventos que disparan acciones | Sistemas reactivos |
🧱 Aplicación al proyecto
Tu proyecto utiliza una arquitectura en capas, con separación entre:
- Modelo de dominio: lógica de negocio (en
domain/models/
) - Persistencia: modelos ORM (en
app/db/models/
) - Interfaz y APIs: controladores, endpoints y vistas web
🔄 Se promueve una arquitectura limpia y desacoplada, basada en principios SOLID y separación de responsabilidades.
🧰 Patrones de diseño útiles
Patrón | Utilidad en el proyecto |
---|---|
Repository | Aisla el acceso a datos del modelo de dominio |
Mapper | Traduce entre ORM ↔ modelo de dominio ↔ Pydantic |
Factory / Builder | Facilita la creación de objetos complejos |
Singleton (controlado) | Gestión de configuraciones o recursos únicos |
Dependency Injection | Facilita pruebas y desacoplamiento |
🔗 Relación con la planificación
Semana | Aplicación concreta |
---|---|
2–3 | Diseño del modelo de dominio y estructura inicial en capas |
3–4 | Aplicación del patrón CRUD y separación lógica |
5–6 | Introducción de servicios, middlewares y autenticación modular |
7–10 | Integración de plantillas y separación de vistas/controladores |
📘 Recursos para profundizar
- Martin Fowler — Patterns of Enterprise Application Architecture
- Robert C. Martin — Clean Architecture
- Eric Evans — Domain-Driven Design
- Catálogo de patrones de diseño de GoF (Gang of Four)
📝 Actividades sugeridas
- Dibujar el diagrama de arquitectura de tu sistema.
- Implementar un patrón Repository para separar lógica y datos.
- Reflexionar: ¿qué ventajas trae la separación entre dominio y persistencia?
💡 Cierre
Una buena arquitectura no es la que resuelve todos los problemas, sino la que facilita el cambio, reduce riesgos y favorece la comprensión del sistema.