Curso de Arquitectura Frontend

Aprende a realizar arquitecturas frontend escalables y mantenibles
Material disponible
Avanzado
31 Clases 9 h
99€
75€
Precio en promoción
El desarrollo de aplicaciones frontend requiere conocimientos sólidos de Javascript y generalmente la aplicación de algunas librerías para poder simplificar muchas de las tareas más frecuentes y tediosas dentro de los proyectos web. Pero no solo eso. Hoy el desarrollo frontend se ha vuelto muy complejo y requiere mantener mucha lógica de la aplicación, por lo que es necesario que sepas organizar tus proyectos y aplicar una arquitectura sólida para facilitar todas las etapas del ciclo de vida de los proyectos, asegurando aspectos como la escalabilidad y el mantenimiento a largo plazo. Por eso, aunque uses frameworks avanzados, es ideal que tengas unas directrices de arquitectura bien dirigidas, separando correctamente las capas de tu aplicación, aplicando correctamente los principios de diseño, atendiendo al dominio, etc.

En este curso de Arquitectura Frontend pretendemos ofrecerte una ayuda definitiva para conseguir mejorar tus proyectos de aplicaciones web de todo tipo, con las prácticas más aconsejables como DDD o Arquitectura Hexagonal. El objetivo es conseguir que tus aplicaciones estén bien diseñadas y gocen de una excelente organización. Todo ello pensando en facilitar el trabajo en equipo, la escalabilidad y el mantenimiento.

Qué aprenderé en el Curso de Arquitectura Frontend

  • Diseñar arquitecturas frontend limpias, modulares y escalables.
  • Separar responsabilidades en capas (Domain, Application, Delivery, Infrastructure).
  • Aplicar Domain Driven Design y Arquitectura Hexagonal en proyectos frontend.
  • Diferenciar y estructurar casos de uso como queries y commands (CQRS).
  • Implementar middlewares para logging, errores, caché y permisos.
  • Crear y utilizar repositorios y puertos con interfaces claras y reutilizables.
  • Organizar el código en módulos por tipo y por dominio.

Objetivos del curso

En este curso el estudiante aprenderá a construir arquitecturas robustas y modulares para proyectos frontend, prestando especial atención a aspectos como:

  • Separar responsabilidades por capas y dominios.
  • Diseñar casos de uso con middlewares.
  • Preparar proyectos para escalar en equipo y funcionalidad.
  • Aplicar principios y arquitecturas conocidos como DDD o Arquitectura Hexagonal.

Por qué debes aprender Arquitectura Frontend

Este curso es la oportunidad de aprender a construir arquitecturas frontend que van más allá del código rápido y desordenado. Está diseñado para quienes buscan proyectos escalables, mantenibles y preparados para equipos en crecimiento y para la colaboración con agentes de IA. A lo largo de dos fases prácticas, adquirirás una visión clara de cómo estructurar capas, casos de uso, repositorios y middlewares, aplicando principios sólidos como DDD y arquitectura hexagonal. Al terminar, tendrás las bases y las técnicas avanzadas para diseñar proyectos frontend robustos, modulares y listos para el futuro del desarrollo.

Qué tengo que saber

  • Conocimientos intermedios de JavaScript y TypeScript
  • Experiencia básica en al menos un framework (React, Angular o Vue)
  • Familiaridad con Node.js y el uso de npm
  • Manejo de Git y flujos de ramas básicos
  • Nociones introductorias de pruebas unitarias (recomendable)
  • Sin necesidad de experiencia previa en arquitectura

Clases y contenidos

Introducción Gratis

En este vídeo veremos de qué trata el curso de Arquitectura Frontend, los objetivos y el contenido que podrás encontrar en esta formación.

Arquitectura Frontend

En este bloque del curso vamos a aprender qué es la arquitectura y estudiaremos cómo se debe aplicar, de manera progresiva y emergente, según consenso por el equipo y según el proyecto lo necesite. Además veremos el proyecto que vamos a desarrollar durante el curso y analizaremos todo lo que nos trae inicialmente como dependencias y herramientas asociadas, aparte del propio código de la aplicación. Veremos que en esta aplicación, aunque se han usado frameworks y librerías, no existe una arquitectura definida, que iremos definiendo a medida que avance el curso.

Detalle del contenido del curso y práctica que se desarrollará

Ahora vamos a ver con mayor detalle cada uno de los bloques de este curso, presentando también la práctica que desarrollaremos a lo largo de la formación

Arquitectura en desarrollo de software

Qué es la arquitectura, por qué la necesitamos, cómo debemos aplicarla sin caer en la sobreingeinería. Introducción de diversos modelos de arquitectura de software como Domain Driven Design o Arquitectura Hexagonal.

Descripción del proyecto inicial

Explicamos las piezas en las que se compone el proyecto inicial del curso, junto con las herramientas, frameworks y librerías que se usan. El proyecto viene con una serie de herramientas ya configuradas como linters, pre commits, tests con Vitest y Playwright, así como dependencias como el framework NextJS, librerías de UI, etc. También se mostrarán la localización de los componentes del propio proyecto y los orígenes de datos.

Casos de uso

Los casos de uso son las acciones que puede hacer el usuario en la aplicación y los podemos usar como un punto transversal para comenzar a definir la arquitectura de la aplicación y la separación por capas. En estos vídeos veremos qué define un caso de uso, cómo los podemos identificar, qué tipos de artefactos (clases, interfaces, tipos…) debemos usar para definirlos y cómo organizar los archivos de código en nuestro proyecto.

Definición y desarrollo de un primer caso de uso

En este vídeo veremos qué son los casos de uso, de dónde vienen y cómo definir un primer ejemplo de caso de uso. Veremos cómo a partir de un código de la aplicación inicial, que no tiene una arquitectura, podemos extraer los casos de uso y separarlos en clases, que tendrán sus propias definiciones de interfaces y tipos, que podremos definir aparte y usar a lo largo de la aplicación. También veremos cómo instanciar las clases de los casos de uso en un contenedor, que luego nos vendrá bien para aplicar otros principios de diseño de software.

Identificar y crear otros dos casos de uso de la aplicación

Creación de nuevos casos de uso según la aplicación de ejemplo del curso. Veremos cómo desarrollar dos nuevos casos de uso, creando las distintas piezas de software que vimos en el anterior vídeo de curso.

Arquitectura Frontend Gratis

Estructurar casos de uso con CQRS

En este bloque de vídeos vamos a avanzar en el desarrollo de los casos de uso estableciendo una estructuración y división entre queries y commands. Serán dos tipos de casos de uso que forman el patrón de arquitectura CQRS.

Introducción a queries y commands en CQRS

En este vídeo veremos qué es CQRS y cómo dividir los casos de uso en dos tipos, los query y los command, implementando estos dos tipos de casos de uso y migrando los casos de uso genéricos a dos ejemplos de query y command.

Refactoring de tipos

Ahora vamos a hacer un rápido refactoring de varios tipos de la aplicación, conociendo algunas de las utilidades de definición de tipos de TypeScript, basando éstos en tipos ya definidos anteriormente.

Migrar un nuevo caso de uso a CQRS

Nos quedaba por migrar un caso de uso a query o command. Este caso de uso puede ser más confuso al escoger su tipo. Veremos los criterios que nos llevan a clasificarlo de una manera particular.

Use Case Service

Para terminar el tema de los casos de uso veremos qué es el use case service, por qué lo queremos implementar así y las ventajas que nos ofrece. Realizaremos el refactoring para adaptar los casos de uso de la aplicación para que trabajen por medio de un use case service.

Organizar los módulos por el dominio y funcionalidad + Design System

En los próximos vídeos vamos a ver principalmente cómo organizar el código de Javascript en el proyecto, creando carpetas donde colocaremos las cosas relacionadas, para conseguir un buen orden, que facilite el mantenimiento y el trabajo en equipo. Además veremos al final cómo dotar al CSS de un poco de arquitectura con un sistema de diseño.

Organización de módulos por tipo de módulo

Una primera organización que podríamos pensar para nuestra arquitectura frontend sería organizar los archivos de Javascript por el tipo de módulo que son, creando carpetas de componentes, servicios, modelos, etc. Veremos cómo se haría y los puntos donde esta organización nos podrían dar problemas de mantenimiento.

Organización de módulos por dominio o funcionalidad

En proyectos medianos o grandes, incluso en los más pequeños, nos vendrá mejor organizar los módulos de Javascript atendiendo a su funcionalidad, o lo que es lo mismo, el dominio en el que estemos trabajando. Esto nos aportará ventajas que explicaremos con detalle. Además veremos cómo organizar el proyecto de una manera más práctica.

Creando subdominios cuando tenemos funcionalidades muy grandes

En este vídeo vamos a ver la estrategia que podemos usar cuando un módulo se está haciendo demasiado grande y vemos que existe una necesidad de estructurarlo. Lo veremos implementado en nuestro proyecto, con una funcionalidad a modo de ejemplo.

Cómo gestionar las páginas por dominio

Ya dependiendo del tipo de proyecto y del framework también podemos tener páginas, que probablemente se agrupan en carpetas distintas, si usamos un framework que tiene un sistema de routing basado en el sistema de archivos. En esos casos las páginas también es interesante que las podamos agrupar por el dominio, facilitando el mantenimiento, la reusabilidad y el trabajo en equipo.

Arquitectura del CSS en un design system

Cómo encarar la arquitectura del CSS, creando un sistema de diseño que podamos usar a lo largo de la aplicación, incluso que podamos reutilizar en varios proyectos de la empresa.

Middlewares

En este bloque vamos a trabajar con middlewares que nos sirven para insertar de manera global y limpia módulos globales que se encarguen de tareas como la gestión de errores o las trazas de forma centralizada.

Qué son los middlewares y cómo los vamos a implementar en el proyecto

Veremos el concepto de middleware, por qué es útil y luego mostraremos cómo se implementan dentro del proyecto del curso de arquitectura frontend. Construiremos un par de middlewares y los pondremos en marcha, demostrando cómo es posible encadenar las llamadas a middlewares antes de la ejecución de los casos de uso, o recuperar la respuesta y seguir haciendo cosas después de que se ejecutaron los casos de uso. Explicaremos un caso práctico donde los middlewares nos resultarán muy útiles que consiste en la posibilidad de intercambiar la pila de middlewares en distintos entornos, como la etapa de desarrollo y la etapa de producción.

Construcción de nuevos middlewares y gestión centralizada de errores

En este vídeo vamos a construir dos nuevos middlewares. Uno sencillo para implementar un timeout en caso que un caso de uso no pueda terminar en un tiempo concreto y uno más complejo para realizar la gestión centralizada de los errores. Por medio del middleware de gestión de errores conseguimos mostrar los errores ocurridos en los casos de uso de una manera sencilla, sin tener que llenar toda la aplicación de bloques try catch. Veremos casos simples donde el middleware muestra los mensajes de error por medio de un simple alter y se demostrará también cómo podríamos escalar eventos para que otros componentes de la aplicación se encarguen de mostrar los errores de una manera más amistosa para el usuario.

Repositorios

Ahora vamos a trabajar con repositorios. No se tratan de repositorios de código (git), nos referimos a un patrón de diseño estructural que ver con el acceso a datos. Se trata de un patrón que tiene mucho impacto en la arquitectura de cualquier proyecto, ya que el trabajo con datos y fuentes de datos es una tarea primordial en cualquier aplicación frontend.

Qué es el patrón repositorio y cómo aplicarlo en una aplicación frontend

En este vídeo veremos con detalle el patrón repositorio, con sus ventajas y cómo se aplica de manera práctica en una aplicación frontend para separar el código de acceso a los datos de los casos de uso, de modo que puedas intercambiar distintos modos de acceso a los datos según las distintas necesidades de tus aplicaciones o entornos de ejecución.

Patrón Mother

Este patrón enunciado por Martin Fowler nos sirve para definir juegos de datos de una manera estructurada y comprensible, de modo que podamos crear datos para casos de prueba a alto nivel y con una semántica bien definida, además de reutilizable.

Completando los repositories de la aplicación

Una vez que ya conocemos el concepto de repositorio y lo hemos visto aplicado en un primer ejemplo, vamos a ver cómo los podemos completar, para gestionar todos los casos de uso en base a repositorios.

Crear una clase que haga de HTTP Client

Como habrás podido comprobar, en los repositorios se hace código muy similar, por lo que podemos crear una nueva abstracción que hace las veces de cliente de HTTP. En nuestro caso será un wrapper de fetch, que se encargará de realizar las operaciones de ejecución de las solicitudes HTTP contra el servidor. Además de simplificar los repositorios y evitar código que es muy parecido en cada uno de ellos, la queremos porque así gestionamos en un solo lugar la interfaz de acceso a HTTP, que puede ser fetch, pero también otras librerías de Javascript como Axios o gretchen. De este modo, si en algún momento se decide cambiar de tecnología de solicitudes HTTP, solo tendremos que tocar una única clase.

Interfaces, SOLID y transformadores

En este bloque vamos a seguir abordando el patrón de repositorios, pero vamos a dedicarnos a profundizar en diversos ámbitos relacionados con el diseño como son la abstracción de interfaces, los principios SOLID y los transformadores.

Abstracción de interfaces para repositorios

A fin de mantener de manera consistente los nombres de los métodos de los repositorios, para ser más coherentes a lo largo de todas las piezas del software de acceso a datos, y facilitar el principio de interface segregation, vamos a crear toda una serie de interfaces para las operaciones de los repositorios.Avanzamos en el uso de repositorios viendo otros asuntos relacionados con el diseño y la arquitectura del software.

SOLID

Vamos a explicar todos los principios de SOLID mostrando cómo impactan en el código de las aplicaciones, tal como lo estamos desarrollando. Además realizaremos nuevas adaptaciones en el proyecto para aplicar SOLID de una manera más adecuada.

Testing

Llegamos a un punto en el que el código de nuestra aplicación es muy testable, así que es el momento de abordar la disciplina del testing. Veremos cómo testear nuestras piezas de software y aprenderemos a crear mocks.

Transformadores

Veremos qué son los transformadores y cómo nos permiten mejorar todavía más las ventajas de uso de nuestros repositorios, realizando operaciones muy habituales como la transformación de los datos que nos envía el backend, para conseguir que se dispongan en el frontend tal como nos viene bien disponer de ellos.

Arquitectura por capas

Explicamos qué son las capas, con todos sus conceptos relacionados y cómo impacta en la arquitectura de nuestro proyecto frontend.

Arquitectura por capas y capa domain

Veremos qué son las capas concretando a qué se refiere, los tipos de arquitecturas de capas y conceptos relacionados, viendo cómo se aplica todo en la arquitectura frontend. Además comenzaremos explicando la primera de las capas, la más estable, la capa de dominio.

Capa de application

En el siguiente nivel tenemos la capa de application, que es la capa que ofrece un nivel de estabilidad medio donde se gestionan los casos de uso con las acciones del usuario, se gestiona el estado de la aplicación, los roles y permisos. Leyendo esta capa sabes qué puede hacer la aplicación.

Capa delivery

Para definir nuestra arquitectura por capas vamos a tener otro nivel que es el delivery. Esta capa indica cómo se expone tu aplicación. Puedes exponer una aplicación con componentes, con un API REST, GraphQL, en una web o en una aplicación de escritorio, o una extensión del navegador. De hecho, una misma aplicación podría tener a la vez distintas maneras de exponerse y también podría cambiar con el tiempo.

Capa Infrastructure

Por último tenemos la capa de infrastructure. Es otra capa también más inestable con dependencias donde tenemos el código que está acoplado con sistemas externos y va a ser nuestro punto de integración. Por ejemplo aquí estarán los DTO o la implementación de los repositorios.

Conclusiones del curso de arquitectura frontend

Un repaso final a los contenidos que hemos visto en el curso a modo de conclusión.

Valoraciones

DOCAL ARTAJO / JAIME

Excelente Curso, la verdad es que se le echaba de menos a César por EscuelaIT

Juan Antonio Cahuana Montes

Excelente curso, había estado un poco perdido al inicio, pero es porque el vídeo del capítulo 7 "Arquitectura Frontend" me parece que debe ir al inicio, porque habla de muchos conceptos como use cases, features, middleware, etc. que se requieren al inicio. Algunos vídeos van muy lento, pero se soluciona aumentando el speed del video player. En general hasta ahora es un excelente curso, tomen en cuenta mover el capítulo 7 al inicio.

¿Conoces nuestra tarifa plana?

Toda la formación de EscuelaIT, con más de 200 cursos completos para aprender las más variadas tecnologías de programación, diseño y marketing online. Todo! con tu suscripción.

Suscríbete