En los últimos artículos de esta serie vimos cómo llevar disciplina y tipado a las vistas de Laravel Blade mediante ViewModels, autocompletado y validación de tipos. Ahora damos el siguiente paso lógico: usar DTOs Data Transfer Objects para controlar de forma estricta qué propiedades de los modelos llegan a la vista, con autocompletado en el IDE y validación en tiempo de ejecución cuando algo no cuadra.
El problema de fondo: los modelos Eloquent suelen tener decenas de columnas, relaciones y helpers. Para una vista concreta casi nunca necesitas todo. Imagina un Product donde la vista solo requiere nombre, imagen, precio y stock. Si pasas el modelo crudo a Blade, el IDE sugiere propiedades que no necesitas y puedes acabar dependiendo de campos no previstos o cargando de más en las consultas.
DTOs como solución: un DTO actúa como contrato mínimo, una clase de datos con solo las propiedades que la vista realmente usa. Por ejemplo, un DTO SimpleProduct con id, name, image, price y stock. Así, el IDE solo sugiere lo relevante y las consultas se limitan a lo necesario.
BaseDTO genérica: una clase base puede validar en el constructor que no se asignen atributos inexistentes y exponer un método columns que devuelve la lista de propiedades del DTO. Esto permite construir select explícitos en las consultas, evitando que lleguen a la vista campos no contemplados.
ViewModels con DTOs: define un ProductsViewModel que agregue colecciones de SimpleProduct, SimpleCategory y SimpleBrand. Desde el controlador puedes poblar el ViewModel usando repositorios o un patrón de consultas como AQC, siempre seleccionando exclusivamente las columnas declaradas por cada DTO mediante su método columns. También puedes mover la preparación de datos a un método handle del propio ViewModel para mantener controladores delgados.
Por qué seleccionar con columns: fuerza a que la consulta solo traiga las columnas del contrato. Si el DTO declara una propiedad que no existe en la tabla, la base de datos fallará con un error de columna desconocida. Lejos de ser un problema, esto protege frente a la deriva de esquema y te mantiene sincronizado con la realidad del modelo.
Autocompletado frente a control estricto: si anotas en Blade que el modelo es un DTO pero envías instancias Eloquent, el IDE autocompleta, pero en ejecución Blade seguirá teniendo acceso a cualquier atributo, relación o accesor. Para enforcement real, convierte el resultado a DTOs antes de entregarlo a la vista.
Pérdida de helpers de Eloquent: los DTO son portadores simples de datos. Accesores, relaciones y helpers no cruzan el límite. Realiza transformaciones y cálculos en servicios, queries o controladores y solo expón a la vista el contrato mínimo.
Coste del mapeo: es bajo. Con un BaseDTO y un mapper genérico que hydrate leyendo por reflexión las propiedades del DTO y copiando los valores coincidentes desde el origen modelo, array o colección, la conversión es un paso pequeño en el pipeline que te da vistas predecibles y seguras.
Recomendaciones prácticas: usa siempre la variable model en vistas y parciales para mantener consistencia. En la cabecera de cada Blade declara mediante phpdoc el tipo del model para activar autocompletado. Entrega ViewModels a las vistas y DTOs a los parciales. Acepta la desconexión de Eloquent en las vistas y realiza cualquier lógica de negocio antes del mapeo.
Resultados que se consiguen: estructura clara con ViewModels, autocompletado real gracias a los DTOs, dependencias explícitas entre vistas y parciales, y consultas restringidas a las columnas definidas por el contrato. Si la plantilla intenta acceder a una propiedad no declarada, se lanza una excepción y el fallo es visible y fácil de corregir.
En Q2BSTUDIO impulsamos proyectos con Laravel y arquitecturas modernas que combinan DTOs, ViewModels, validación y patrones de consulta para lograr aplicaciones a medida y software a medida robustos, mantenibles y orientados al rendimiento. Si buscas acelerar tu roadmap con diseño escalable y código de calidad, nuestro equipo puede ayudarte a crear experiencias seguras, tipadas y predecibles desde el backend hasta Blade.
Además de desarrollo, en Q2BSTUDIO somos especialistas en inteligencia artificial, ia para empresas y agentes IA, ciberseguridad y pentesting, servicios cloud aws y azure, servicios inteligencia de negocio y power bi, así como automatización de procesos. Descubre cómo abordamos el ciclo completo de producto desde la estrategia hasta la puesta en producción, con foco en fiabilidad, observabilidad y seguridad.
Si necesitas un partner para diseñar y construir aplicaciones a medida o modernizar tu stack, visita nuestra propuesta de desarrollo de aplicaciones y software a medida. Y si quieres incorporar modelos de IA, NLP, RAG, visión artificial o copilotos internos en tus flujos de negocio, consulta nuestras soluciones de inteligencia artificial para llevar la automatización y el análisis al siguiente nivel.
Conclusión: con DTOs, ViewModels y validación estricta, Blade pasa a ser un consumidor disciplinado de datos, autodescriptivo y rápido de mantener. Menos sorpresas, más velocidad de desarrollo y un mejor acoplamiento entre dominio y presentación, todo alineado con las mejores prácticas que aplicamos a diario en Q2BSTUDIO.