Diario de desarrollo: Costuras de drivers, errores de URL y ajustes de la BD

Pasé el día construyendo una plataforma. Una idea arquitectónica apareció constantemente. Debes colocar una costura entre lo que haces y dónde almacenas los datos.

Esto te permite cambiar tu backend más adelante sin modificar tu código principal.

El patrón de las costuras

Estoy construyendo una plataforma de observabilidad. Recopila errores y métricas de muchas fuentes. Cada tarea de almacenamiento siguió el mismo patrón:

• Crear una interfaz pequeña (el contrato). • Crear un driver de Eloquent (la implementación).

Los dashboards y pipelines solo se comunican con la interfaz. Uso Postgres por ahora porque es confiable. Si necesito una base de datos más rápida más adelante, simplemente escribo un nuevo driver. No cambio el código de mi dashboard.

La lección es sencilla: No necesitas un segundo driver desde el primer día. Necesitas la interfaz desde el primer día. Un archivo extra ahora evita una reescritura masiva después.

Tres buenos hábitos

• Usa identificadores duales. Usa IDs de auto-incremento para joins internos rápidos. Usa UUIDs para cualquier cosa que salga de tu sistema, como URLs o APIs. Esto mantiene privados tus recuentos de filas.

• Usa Enums. Almacena roles y estados en enums de PHP. Esto asegura que tu UI y tu lógica utilicen la misma fuente de verdad.

• Versiona tus datos. Incluye siempre un campo de versión en tus payloads. Añade nuevos campos opcionales, pero nunca renombres ni elimines los antiguos. Esto evita romper clientes más antiguos.

El error de la URL de seguimiento

Encontré un error en un paquete de seguimiento de correos electrónicos. El paquete reescribe los enlaces para rastrear los clics. Cifra la URL y luego la restaura durante la redirección.

El problema: Laravel escapa el HTML de los enlaces en las plantillas de correo. Una URL firmada utiliza caracteres "&". En HTML, estos se convierten en "&".

Si cifras la cadena escapada, el "&" permanece en la URL. Cuando Laravel intenta validar la firma, falla porque la cadena ha cambiado. Esto solo ocurre con URLs firmadas, por lo que es difícil de encontrar.

La solución: Decodifica las entidades HTML antes de capturar la URL.

Uso de la base de datos para la configuración

Construí una forma para que los administradores cambien los ajustes de la aplicación en un dashboard. Estos ajustes residen en la base de datos, pero la aplicación sigue leyéndolos usando la función estándar config().

Utilizo una capa ligera en el AppServiceProvider. Lee los ajustes de la base de datos y los introduce en la configuración para la solicitud actual. Esto mantiene el resto del código simple y estándar.

El tema común aquí son los límites. Decide dónde va la costura. Coloca el límite en el lugar correcto una sola vez. Todo lo demás se mantiene simple.

Fuente: https://dev.to/nasrulhazim/dev-log-2026-06-25-driver-seams-everywhere-a-tracking-url-bug-and-db-backed-settings-442l