Saltar al contenido

file_download
Proyecto final
N/A
play_circle_outline
vista previa
4 minutos
play_circle_outline
vista previa
2 minutos
play_circle_outline
vista previa
3 minutos
play_circle_outline
vista previa
3 minutos
play_circle_outline
vista previa
2 minutos

play_circle_outline
vista previa
3 minutos
play_circle_outline
vista previa
5 minutos
play_circle_outline
vista previa
5 minutos
play_circle_outline
vista previa
4 minutos

play_circle_outline
vista previa
8 minutos

play_circle_outline
Implementar Puerto de Entrada Crear Tarea
6 minutos
play_circle_outline
Implementar Puerto de Entrada Completar Tarea
2 minutos
play_circle_outline
Implementar Puerto de Entrada Listar Tareas
2 minutos
play_circle_outline
Implementar Puerto de Entrada Notificar Tareas Vencidas
3 minutos

play_circle_outline
Test Crear Tarea con Adaptador InMemory
6 minutos
play_circle_outline
Test Completar Tarea con Adaptador InMemory
3 minutos
play_circle_outline
Test Listar Tareas con Adaptador InMemory
4 minutos
play_circle_outline
Test Notificar Tareas Vencidas con Adaptador InMemory
6 minutos
play_circle_outline
Trait de Contrato para Tests Dinámicos de Adaptadores (TaskStore)
6 minutos
play_circle_outline
Test de TaskStore utilizando InMemory
3 minutos

play_circle_outline
Adaptador File para TaskStore
4 minutos
play_circle_outline
Test File para TaskStore
4 minutos

play_circle_outline
Modelo Eloquent TaskRow
3 minutos
play_circle_outline
Migración tabla tareas
2 minutos
play_circle_outline
Adaptador Eloquent para TaskStore
3 minutos

play_circle_outline
Clase Compartida de Texto para Notificaciones
2 minutos
play_circle_outline
Adaptador Console para Notificaciones
2 minutos
play_circle_outline
Adaptador Mail para Notificaciones
2 minutos

play_circle_outline
Adaptador PlainCLI
5 minutos
play_circle_outline
Contenedor con Inyección de Dependencias
3 minutos
play_circle_outline
Lanzar la Aplicación sin Framework
5 minutos

play_circle_outline
Clase JSON reutilizable para Controladores
2 minutos
play_circle_outline
Clase centralizada para gestión de excepciones HTTP
3 minutos
play_circle_outline
Controlador para Crear Tareas
2 minutos
play_circle_outline
Controlador para Completar Tareas
2 minutos
play_circle_outline
Controlador para Listar Tareas
1 minutos
play_circle_outline
Controlador para Notificar Tareas Vencidas
3 minutos
play_circle_outline
Rutas de la Capa HTTP
2 minutos

play_circle_outline
Adaptador para Notificar vía Comandos
2 minutos
play_circle_outline
Job para Notificar Tareas Vencidas
2 minutos
play_circle_outline
Comando para Notificar vía Job
2 minutos

play_circle_outline
Archivo de configuración
1 minutos
play_circle_outline
Service Provider con Bindings y Registros
4 minutos

play_circle_outline
Registrar Sistema Personalizado de Excepciones
1 minutos
play_circle_outline
Test de TaskStore utilizando Eloquent
2 minutos
play_circle_outline
Probar Todo el Sistema
8 minutos
play_circle_outline
Despedida
2 minutos
Vídeo de introducción Arquitectura Hexagonal Laravel
play_circle_filled

Desbloquea el curso

starVer planes de suscripción
school

¿Qué aprenderás?

En este curso aprenderás arquitectura hexagonal en Laravel tal y como se definió: puertos y adaptadores, sin DDD de por medio. Casi todo el material que encontrarás mezcla los dos conceptos y presenta las capas de dominio, aplicación e infraestructura como si formaran parte del patrón. No lo son. Aquí construirás un gestor de tareas cuyo núcleo no conoce Laravel, y que podrías llevarte tal cual a un proyecto Symfony, a un Zend o a un script de PHP plano.

Puertos driving y puertos driven

Partimos de la nomenclatura original de Alistair Cockburn, no de la traducción habitual a "entrada y salida". Los puertos driving son lo que tu núcleo ofrece al exterior: CreateTask, CompleteTask, ListTasks y NotifyOverdue. Los puertos driven son lo que tu núcleo necesita del exterior: TaskStore, Clock y Notifier. Entender esta dirección es entender el patrón entero.

Un núcleo que no conoce el framework

Dentro de src/Core montarás los modelos (Task, ListedTask), los errores propios (CoreError, InvalidRequest, TaskAlreadyExists, TaskNotFound), los puertos y una capa de servicios que los implementa. Esos servicios trabajan únicamente contra abstracciones: no saben que existe Eloquent, ni el contenedor, ni una petición HTTP. Verás también por qué esa capa podría llamarse igual UseCase o Handler sin que cambie nada.

Adaptadores intercambiables de verdad

En src/Adapter escribirás varias implementaciones para el mismo puerto: almacenamiento en memoria, en archivo y con Eloquent, además de un reloj de sistema y un notificador. Todas cumplen el mismo contrato, así que cambiar de una a otra no toca ni una línea del núcleo. Y del lado driving, adaptadores por CLI y HTTP que consumen exactamente los mismos casos de uso.

La capa de wiring

La tercera pieza es src/Wiring, un service provider que decide qué adaptador se inyecta en cada puerto y que puedes conmutar con una variable de entorno. Es el único punto del proyecto donde el núcleo y Laravel se tocan, y ahí es donde la inversión de dependencias deja de ser una frase de manual y se vuelve algo que puedes ver funcionando.

El núcleo, ejecutándose fuera de Laravel

Para cerrar el círculo crearás un directorio bin/ y ejecutarás los mismos casos de uso con PHP plano, sin framework de ningún tipo. Si el núcleo responde igual, la portabilidad deja de ser una promesa y pasa a ser una demostración.

Tests de contrato

Escribirás un test de contrato: un trait con un método abstracto que cada test implementa indicando qué almacén usar, de forma que una sola batería de pruebas valida memoria, archivo y Eloquent por igual. Cuando añadas un adaptador nuevo no escribes tests nuevos, solo declaras cuál es.

assignment

Requisitos

  • Experiencia sólida con Laravel. Se recomienda haber completado la Ruta Laravel 11 o tener conocimientos equivalentes.

  • PHP moderno: interfaces, tipado estricto, propiedades readonly y promoción de constructores.

  • Programación orientada a objetos e inyección de dependencias con el contenedor de servicios de Laravel.

  • Conocer los principios SOLID, en especial la inversión de dependencias. Puedes repasarlos en este artículo.

  • Manejo básico de PHPUnit para escribir y ejecutar tests.

  • Conocimientos básicos de Git y terminal. Puedes ponerte al día con el curso de iniciación con GitHub.

  • No necesitas saber nada de DDD. De hecho, en este curso no lo vas a usar.

group

¿A quién va dirigido el curso?

Este curso está dirigido a cualquier desarrollador Laravel que quiera dar el salto. No hace falta que lleves diez años ni que hayas trabajado nunca con arquitecturas limpias: hace falta que sepas moverte con soltura por un proyecto Laravel y que tengas ganas de entender cómo se construye software que aguanta.

Es un curso avanzado, sí, pero avanzado no significa inaccesible. Vamos paso a paso, escribiendo el código juntos y explicando el porqué de cada decisión antes de tomarla. Si alguna vez has abierto un artículo sobre arquitectura hexagonal y lo has cerrado a los dos minutos, es justo el tipo de persona para la que está pensado esto.

Y conviene aclararlo: la arquitectura es lo que separa a un programador de un ingeniero de software. Es lo que se pregunta en las entrevistas para los puestos que mejor pagan, lo que te permite liderar un proyecto en lugar de limitarte a ejecutar tareas, y lo que hace que una aplicación siga siendo mantenible tres años después. Con la IA escribiendo cada vez más código, el valor se ha desplazado hacia quien sabe decidir: qué estructura tiene sentido, dónde poner cada límite y por qué. Eso no lo aprendes pidiéndoselo a un modelo, lo aprendes construyéndolo.

help_outline

¿Qué hacer en caso de dudas durante el curso?

La suscripción incluye soporte a través del foro del curso.

Las dudas que se planteen en el foro del curso serán respondidas en un plazo máximo de 24 horas laborables.

Las dudas planteadas deben estar relacionadas con el contenido del curso y no con desarrollos personalizados que no estén relacionados con el curso.

card_membership

Certificado de finalización

emoji_events

Al completar todas las lecciones del curso, obtendrás un certificado de finalización en formato PDF personalizado con tu nombre y un código QR de verificación.

  • center_focus_weak Código QR con enlace al curso
  • picture_as_pdf Descargable en formato PDF
  • person Personalizado con tu nombre

star Disponible exclusivamente para suscriptores.

Especialista con +15 años de experiencia en desarrollo web Full Stack. Dominio avanzado en Laravel y Vue.js, creando aplicaciones modernas de alto rendimiento. Instructor profesional con 8 años compartiendo conocimiento a través de cursos especializados que han formado a cientos de desarrolladores.

Israel Parra

Desarrollador Full Stack & Formador
visibility Vista previa

star

¿Te gusta lo que ves? Accede a este curso completo y a más de 200 cursos con una suscripción.

launch Ver planes de suscripción