Navegación de vistas e historial

Una pila de navegación agnóstica al proveedor que hace push de vistas, registra el historial y añade soporte al botón atrás en cualquier UI de Unity sin acoplarse a un menú o router concreto.

Para qué sirve este sistema

Todo juego con más de una pantalla acaba construyendo lo mismo: una pila que recuerda de dónde viene el jugador para que al pulsar atrás llegue al sitio correcto. Ya sea volver de los ajustes al menú de pausa o cerrar un modal hacia el mapa, la lógica es idéntica. Sin un servicio compartido se reimplementa por escena, por menú y por desarrollador.

El View Browser de Serenity convierte esa pila en un agregado de primera clase. Expone un servicio tipado para hacer push de vistas, navegar hacia atrás, inspeccionar el historial y leer la vista actual — todo a través de una interfaz limpia que funciona por encima de cualquier proveedor de UI o implementación de router.

El problema en Unity

Los proyectos Unity que crecen de forma orgánica acumulan lógica de navegación en MonoBehaviours, gestores estáticos y callbacks de carga de escena. El botón atrás del menú de pausa se gestiona de forma distinta al de los ajustes, que a su vez es diferente al de la personalización del personaje. Cuando el equipo añade una pantalla nueva o cambia el flujo, hay que actualizar cada punto de llamada y el estado del historial se rompe de maneras sutiles.

El coste real no es escribir la pila — es mantenerla. Limpiar el historial al cambiar de game mode, proteger GoBack cuando la pila está vacía, saber qué vista está activa sin recorrer la jerarquía de escena — cada uno de esos casos es un bug esperando ocurrir cuando la lógica está dispersa por el proyecto.

Cómo lo aborda Serenity

Serenity proporciona IViewBrowserService con cinco operaciones: Push acepta un ViewBrowserPushInput que lleva cualquier IViewBase y lo añade a la pila de historial, GoBack desapila la entrada superior y devuelve la vista a la que se ha vuelto, ClearHistory reinicia la pila por completo, GetHistory devuelve la lista ordenada completa de vistas y GetCurrentView lee la cima de la pila sin mutarla. IViewBrowserServiceFactory permite crear y sustituir la implementación Unity a través del patrón de factoría estándar de Serenity.

La capa de infraestructura Unity proporciona UnityViewBrowserService, un MonoBehaviour que implementa IViewBrowserService y gestiona la lista interna. Las clases de caso de uso ViewBrowserPush, ViewBrowserGoBack y ViewBrowserClearHistory encapsulan cada operación de forma limpia, y ViewBrowserUseCases las agrupa para que el servicio pueda inyectarse como dependencia única donde sea necesaria la navegación.

Cómo encaja en Serenity

View Browser vive en el namespace Serenity.ViewBrowser y sigue la estructura por capas de la foundation. La capa de Aplicación contiene IViewBrowserService, IViewBrowserServiceFactory, las clases de caso de uso y ViewBrowserPushInput como DTO. La capa de Infraestructura proporciona el MonoBehaviour UnityViewBrowserService específico de Unity y su factoría. La capa de Instalación registra el servicio a través de la pipeline de inicialización estándar de Serenity sin tocar a los consumidores.

View Browser se sitúa por encima de IViewRouter del agregado Global, por lo que coopera de forma limpia con el Sistema de Menús para la navegación hacia atrás en menús, con el Sistema de Modales para registrar las vistas abiertas como modales, con UI Themes para restaurar el estado visual correcto al volver atrás y con Game Mode para que el historial de navegación pueda limpiarse al cambiar el modo activo.

Flujo de trabajo práctico

  1. Añade el instalador del View Browser a la pipeline de inicialización del proyecto para registrar IViewBrowserService.
  2. Inyecta IViewBrowserService o ViewBrowserUseCases en cualquier menú, controlador o presenter que necesite navegar.
  3. Llama a Push con un ViewBrowserPushInput que envuelva el IViewBase de destino cada vez que el jugador abra una pantalla nueva.
  4. Llama a GoBack desde los botones atrás, los manejadores de escape o cualquier gesto que vuelva a la vista anterior.
  5. Llama a GetCurrentView para saber qué vista está activa sin recorrer la jerarquía de escena.
  6. Llama a ClearHistory en las transiciones de game mode o cuando el contexto de navegación se reinicie por completo.

Qué incluye

  • IViewBrowserService con Push, GoBack, ClearHistory, GetHistory y GetCurrentView
  • DTO ViewBrowserPushInput que lleva cualquier IViewBase a la pila de navegación
  • Clases de caso de uso ViewBrowserPush, ViewBrowserGoBack y ViewBrowserClearHistory para una separación limpia
  • Agregado ViewBrowserUseCases para inyección con dependencia única
  • IViewBrowserServiceFactory que mantiene la implementación Unity reemplazable
  • MonoBehaviour UnityViewBrowserService como infraestructura Unity lista para usar
  • GoBack seguro que lanza una excepción descriptiva cuando la pila está vacía en lugar de fallar silenciosamente
  • Integración con el Sistema de Menús, el Sistema de Modales, UI Themes y Game Mode a través de los contratos compartidos de Serenity

Cuándo usarlo

  • Proyectos donde varias pantallas necesitan un flujo de navegación hacia atrás coherente sin duplicar la lógica de pila por escena.
  • Juegos con menús, modales o vistas superpuestas que necesitan restaurar el contexto anterior de forma fiable.
  • Bases de código que quieren limpiar el historial de navegación en las transiciones de game mode sin acoplar esa lógica a cada menú individual.
  • Equipos que quieren que el soporte al botón atrás y a la tecla Escape funcione de la misma manera en todo el proyecto.

Sistemas relacionados

Usa el View Browser de Serenity cuando necesites una pila de navegación única y probada que comparta todo el proyecto — para que volver atrás funcione igual en menús, modales y overlays de gameplay sin tener que escribirlo cada vez.

Volver a la página principal