Saltar al contenido

El enrutado, que ya no es enrutado

Sin servidor y sin dominio, navegar entre pantallas cambia de significado. Qué modo usar, por qué el historial se comporta distinto, y qué hacer con las URLs.

Qué modo usar

La recomendación es clara y contraintuitiva para quien viene de la web: por fragmento, o sin enrutador. Las rutas limpias existen para que las URLs se vean bien, y aquí no hay quien las vea.

El historial

Y la pregunta que sigue: ¿el botón de atrás existe en tu aplicación?

  • En una web, sí, y el usuario lo espera: el navegador lo pone.
  • En una aplicación de escritorio no hay botón de atrás del sistema, salvo que tú lo pongas.

Y eso cambia el significado del historial: en la web es una lista de sitios visitados; aquí es, si acaso, un mecanismo de navegación interna que tú decides ofrecer.

Dos posturas válidas:

  • Sin historial: la aplicación tiene una estructura de pantallas y se navega por su interfaz. Es lo que hacen casi todas las aplicaciones de escritorio.
  • Con historial explícito: si tu aplicación es de las que se explora —un navegador de documentación, un visor— y tiene sentido volver atrás, con atajos y botones propios.

Lo que no vale es depender del historial del navegador sin ofrecer forma de usarlo: el usuario no tiene botón de atrás, así que si tu navegación mete entradas en el historial y nada las consume, están de adorno.

¿Necesitas rutas?

Merece preguntárselo, porque la respuesta a veces es no:

Rutas y enlaces profundos

Cuando sí hay rutas, conviene que el mapeo entre enlace externo y ruta interna sea explícito:

Rust
// el core traduce el enlace a una acción, y el frontend recibe la acción — no la rutafn accion_de(enlace: &Url) -> Option<Accion> {    match (enlace.host_str(), enlace.path()) {        (Some("proyecto"), p) => p.trim_start_matches('/').parse().ok().map(Accion::AbrirProyecto),        (Some("ajustes"), _) => Some(Accion::AbrirAjustes),        _ => None,    }}

Y no traducir la ruta del enlace directamente a una ruta del frontend, por dos razones: sería el mapeo genérico que el nivel 51.2 desaconseja, y ataría tu esquema de enlaces públicos a la estructura interna de tu interfaz — que va a cambiar.