Ejercicio de programación. Desarrollar un formulario para la solicitud de un préstamo.
Estás viendo la versión typescript de este proyecto. En la rama jsdoc tienes exactamente el mismo proyecto pero escrito en javascript sin haber perdido ninguno de los beneficios que ofrece typescript en cuanto al tipeado fuerte de tu código.
- Dependencias mínimas: sólo
react
,next.js
yvanilla-extract
- Sistema de diseño propio (ver la carpeta
design-system
) - Performance gracias a los estilos precompilados (zero-runtime)
- Aplica patrones de diseño como service/repository pattern
- Gran parte de la ejecución ocurre en el lado del servidor y no en el navegador
- Diseño responsive
Crear un archivo .env.local
en el root del proyecto con el siguiente contenido:
NEXT_PUBLIC_LOANS_SERVICE_API_ENV=<url de la api> (sin barra / final)
NEXT_PUBLIC_LOANS_SERVICE_KEY_ENV=Development
NEXT_PUBLIC_TERMS_AND_CONDITIONS_URL_ENV=<url de los términos y condiciones>
Abrir una consola de comandos y ejecutar lo siguiente:
npm install
npm run dev
Dirigirse a la siguiente url local para probar: localhost
Estructura de carpetas escalable a grandes proyectos
src
├── app # Contiene las rutas de la aplicación
│ ├── layout.tsx
│ ├── loans
│ └── not-found.tsx
├── common # Contiene funciones generales como utils, interfaces, etc
│ ├── configuration
│ ├── index.ts
│ ├── interfaces
│ └── utils
├── components # Contiene los componentes de react de la aplicación
│ ├── client
│ └── server
├── core # Contiene toda la lógica de negocio
│ ├── index.ts
│ ├── loans # módulo de préstamos
│ └── user # módulo de usuario
└── design-system # Contiene el sistema de diseño de la aplicación
├── atoms
├── buttons
├── info
├── inputs
├── layout
└── modals
No depender de muchos paquetes externos asegura mayor control de tu aplicativo y da la confianza de que una actualización no va a romper tu sistema.
Asegura la homogeneidad de la herramienta a través de todos sus módulos y secciones, además de brindar una imagen de marca a la empresa.
Asegura la escalabilidad de la herramienta ya que se pueden integrar más apps que podrás reutilizar los mismos componentes como Buttons
, Inputs
y demás.
Asegura que los estilos no añaden carga de procesamiento extra durante la ejecución de la herramienta como sí sucede si se usasen librerías del tipo CSS-in-JS
Gran parte de la implementación la hicimos en el lado del servidor lo que mejora el SEO y el performance de la herrmienta ya que el navegador no tiene que ejecutar javascript.
El acceso a la data es responsabilidad de la capa repositorio (ver carpeta core/loans/*.repository
o core/user/*.repository
). Entre tanto, la capa de servicio es la única que tiene permitido comunicarse con la capa repositorio. Por lo tanto, nuestro código de implementación sólo se comunica con la capa de servicios y nunca con el repositorio directamente.
Esto asegura no sólo las buenas prácticas sino también la escalabilidad y el mantenimiento del sistema al desacoplar estas capas.
Aspectos que intencionalmente fueron dejados de lado para apresurar el desarrollo:
- Internacionalización
- Application theme
- Componentes de autocompletado como selectores o pickers
- ESLint