Softx0 / redux-todo-list

A project to practice the knowledge and teach others in the future

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

React Redux Todo List

Proyecto

Que debo conocer antes de:

Tecnologias

  • React v18, no obstante utilizando los features de la v17
  • Docker
  • ESLint
  • Prettier
  • Husky

Setup

  1. Clonar el repositorio

  2. Crear archivo .env con las variables especificadas en el .env.sample

  3. Para correrlo sin docker:

    3.1. Situarse en la raiz del proyecto, proceder a instalar las dependencias con yarn install

    3.2. Ejecutar yarn start

  4. Para correrlo con docker: 4.1. Construimos la imagen

    docker build -t IMAGE_NAME:$TAG_IMAGE_DEV -f Dockerfile .
    

    4.2. Procedemos a crear el container

    docker run -dp 3000:3000 --name PROJECT_NAME IMAGE_NAME:$TAG_IMAGE_DEV
    
  5. Abrir el browser y dirigirse a localhost:3000

Consideraciones para el CI-CD

Como se presenta en el Dockerfile, se debe tener en cuenta antes de emitir un lanzamiento hacia el CI se debe de con antelación crear el archivo yarn.lock localmente. Esto con el objetivo de optimizar el despliegue y liberación del proyecto en el servidor, así como también que el motivo es que a nivel del Dockerfile se esta utilizando el comando yarn install --frozen-lockfile buscando mejorar el rendimiento del pipeline.

Arquitectura

Clean Architecture

En Clean Architecture, una aplicación se divide en responsabilidades y cada una de estas responsabilidades se representa en forma de capa.

Se basa en que la capa de dominio (Models/State) no dependa de ninguna capa exterior. La de aplicación sólo depende de la de dominio y el resto (normalmente presentación y acceso a datos) depende de la capa de aplicación. Esto se logra con la implementación de interfaces que luego tendrán que implementar las capas externas mediante la inyección de dependencias.

El siguiente diagrama representa la adaptación hecha de Clean Architecture para un proyecto Frontend basado en Typescrit y React

CleanArchitectureReact

Capas

  • Servicios Externos: es la capa que contiene los servicios que conectan el dominio con el mundo exterior (capas exteriores). Aquí se definen los contratos, interfaces destinados a consumir los servicios externos.

    • services: todos aquellos lugares donde vamos a estar llamando para buscar la información
  • Adaptadores: es la capa de estandarización datos. Implementa interfaces definida en la capa de Servicios Externos y estandariza los responses de los servicios externos buscando llevar a la aplicación la menor cantidad errores humanos.

    • adapters: estandarizar en base al modelo y el endpoint de momento. Reciben informacion y la devuelven.
    • interceptors: se busca en base a los adapters adaptar lo que enviamos y lo que recibimos (usalmente se utiliza axios como estandar)
  • Componentes: Aqui se define toda la logica de negocio, mediante los components como tal, los hooks, utilities entre otros...

    • components: logica de negocio / componentes estilizados
    • hooks: custom hooks que sean reutilizables en un segmento o toda la aplicación, para controlar su ciclo de vida.
    • routes: definir las rutas de la aplicación y sus conexiones
    • utilities: porciones de logica reutilizables en la aplicacion
    • assets: estilos, fonts, recursos graficos, entre otros.
  • Models/State: es el corazon de la aplicación y tiene que estar totalmente aislada de cualquier dependencia ajena a la lógica o los datos de negocio. Puede contener entidades, value objects, eventos y servicios del dominio. Representan el state y el state en sí.

    • types/interfaces/models: dar la representacion de nuestras entidades, y estandarizar un contrato sobre lo que se utilizara.
    • context: cualquier recurso que se necesite para manejar el state dentro de un alcance definido y que no sera necesario en toda la aplicación en todo momento.
    • redux: información que se necesita en toda la aplicación en todo momento.

Patrones y metodologías utilizadas:

  • Axios: Para el consumo de servicios en la capa de Servicios Externos

  • Pruebas unitarias: Se debe utilizar jest asi como react-testing-library

About

A project to practice the knowledge and teach others in the future


Languages

Language:TypeScript 84.1%Language:HTML 6.1%Language:Dockerfile 5.6%Language:Shell 4.2%