3.0 KiB
Galerías Fotográficas - Decisiones de Arquitectura
Relacionado
¿Por qué Angular en lugar de React?
Como producto final, se pretende vender varias plantillas frontales. Vamos a empezar por el diseño de la primera plantilla con Angular por su fácil escalabilidad y modularidad para el caso en que se incorporen nuevo programadores.
¿Por qué .NET en lugar de Node.js?
.NET ofrece un rendimiento superior y una mejor integración con herramientas empresariales, lo que lo hace más adecuado para aplicaciones de gran escala. Además, permite un desarrollo más rápido y eficiente gracias a su robusto ecosistema de bibliotecas y herramientas.
Decisiones sobre manejo de imágenes
Como objetivo final, se pretende tener una independencia total del proveedor de almacenamiento de imágenes. Para ello, se optará por una arquitectura que permita cambiar de proveedor sin afectar al resto del sistema. Por facilidad y sencillez durante el desarrollo, se comenzará con un sqlite + el sistema de archivos local.
Para tratar los datos usaremos EntityFramework con una visión Data First, es decir, primero se definirá el modelo de datos y las relaciones en base de datos y posteriorimente se generarán las migraciones y se modificará el modelo del back. Usaremos Serilog + OpenTelemetry para el monitoreo y trazabilidad de las aplicaciones de forma sencilla. Usaremos Scalar + OpenApi para documentar la API de forma sencilla y visual. Usaremos MailKit para enviar correos electrónicos de forma sencilla y eficiente. Usaremos MediatR para la implementación de patrones CQRS (Command Query Responsibility Segregation) en el backend. Usaremos Polly para la gestión de resiliencia y manejo de fallos en las aplicaciones. Usaremos FluentValidation para la validación de datos de forma sencilla y eficiente. Usaremos Hangfire para la gestión de trabajos en segundo plano. Usaremos Redis como sistema de caché distribuido. Usaremos PostgreSQL como sistema de gestión de bases de datos. Durante el desarrollo, y en entornos locales, usaremos sqlite. Usaremos AutoMapper para la mapeo de objetos de forma sencilla y eficiente.
Para el front usaremos TailwindCSS para el diseño de interfaces de usuario de forma rápida. Usaremos NgRx para la gestión del estado de la aplicación de forma predecible y eficiente.
Elección de patrones arquitectónicos
En el backend se usará DDD ( Domain-Driven Design ) y CQRS ( Command Query Responsibility Segregation ). Esto facilitará la escalabilidad y el mantenimiento del sistema a largo plazo. Además, permite una rápida implementación de nuevas funcionalidades y una adaptación más simple para nuevo programadores.
En el frontend se utilizará una arquitectura MVVM (Model-View-ViewModel) repartida en componentes reutilizables. Esto ayudará en la separación de responsabilidades de cada componente y facilitará la adición de nuevas pantallas.