Navegació de vistes i historial
Una pila de navegació agnòstica al proveïdor que fa push de vistes, registra l'historial i afegeix suport al botó enrere a qualsevol UI de Unity sense acoblar-se a un menú o router concret.
Per a què serveix aquest sistema
Tot joc amb més d'una pantalla acaba construint el mateix: una pila que recorda d'on ve el jugador perquè en prémer enrere arribi al lloc correcte. Tant si es tracta de tornar dels ajustos al menú de pausa com de tancar un modal cap al mapa, la lògica és idèntica. Sense un servei compartit es reimplementa per escena, per menú i per desenvolupador.
El View Browser de Serenity converteix aquesta pila en un agregat de primera classe. Exposa un servei tipat per fer push de vistes, navegar cap enrere, inspeccionar l'historial i llegir la vista actual — tot a través d'una interfície neta que funciona per sobre de qualsevol proveïdor d'UI o implementació de router.
El problema a Unity
Els projectes Unity que creixen de manera orgànica acumulen lògica de navegació en MonoBehaviours, gestors estàtics i callbacks de càrrega d'escena. El botó enrere del menú de pausa es gestiona de manera diferent al dels ajustos, que al seu torn és diferent al de la personalització del personatge. Quan l'equip afegeix una pantalla nova o canvia el flux, cal actualitzar cada punt de crida i l'estat de l'historial es trenca de maneres subtils.
El cost real no és escriure la pila — és mantenir-la. Netejar l'historial en canviar de game mode, protegir GoBack quan la pila és buida, saber quina vista és activa sense recórrer la jerarquia d'escena — cadascun d'aquests casos és un bug esperant que passi quan la lògica és dispersa per tot el projecte.
Com ho aborda Serenity
Serenity proporciona IViewBrowserService amb cinc operacions: Push accepta un ViewBrowserPushInput que porta qualsevol IViewBase i l'afegeix a la pila d'historial, GoBack desapila l'entrada superior i retorna la vista a la qual s'ha tornat, ClearHistory reinicia la pila completament, GetHistory retorna la llista ordenada completa de vistes i GetCurrentView llegeix el cim de la pila sense mutar-la. IViewBrowserServiceFactory permet crear i substituir la implementació Unity a través del patró de factoria estàndard de Serenity.
La capa d'infraestructura Unity proporciona UnityViewBrowserService, un MonoBehaviour que implementa IViewBrowserService i gestiona la llista interna. Les classes de cas d'ús ViewBrowserPush, ViewBrowserGoBack i ViewBrowserClearHistory encapsulen cada operació de manera neta, i ViewBrowserUseCases les agrupa perquè el servei pugui injectar-se com a dependència única allà on calgui la navegació.
Com encaixa a Serenity
View Browser viu al namespace Serenity.ViewBrowser i segueix l'estructura per capes de la foundation. La capa d'Aplicació conté IViewBrowserService, IViewBrowserServiceFactory, les classes de cas d'ús i ViewBrowserPushInput com a DTO. La capa d'Infraestructura proporciona el MonoBehaviour UnityViewBrowserService específic de Unity i la seva factoria. La capa d'Instal·lació registra el servei a través de la pipeline d'inicialització estàndard de Serenity sense tocar els consumidors.
View Browser se situa per sobre d'IViewRouter de l'agregat Global, de manera que coopera neta amb el Sistema de Menús per a la navegació cap enrere en menús, amb el Sistema de Modals per registrar les vistes obertes com a modals, amb UI Themes per restaurar l'estat visual correcte en tornar enrere i amb Game Mode perquè l'historial de navegació es pugui netejar en canviar el mode actiu.
Flux de treball pràctic
- Afegeix l'instal·lador del View Browser a la pipeline d'inicialització del projecte per registrar IViewBrowserService.
- Injecta IViewBrowserService o ViewBrowserUseCases a qualsevol menú, controlador o presenter que necessiti navegar.
- Crida Push amb un ViewBrowserPushInput que embolcalli l'IViewBase de destinació cada vegada que el jugador obri una pantalla nova.
- Crida GoBack des dels botons enrere, els gestors d'escape o qualsevol gest que torni a la vista anterior.
- Crida GetCurrentView per saber quina vista és activa sense recórrer la jerarquia d'escena.
- Crida ClearHistory en les transicions de game mode o quan el context de navegació es reiniciï completament.
Què inclou
- IViewBrowserService amb Push, GoBack, ClearHistory, GetHistory i GetCurrentView
- DTO ViewBrowserPushInput que porta qualsevol IViewBase a la pila de navegació
- Classes de cas d'ús ViewBrowserPush, ViewBrowserGoBack i ViewBrowserClearHistory per a una separació neta
- Agregat ViewBrowserUseCases per a injecció amb dependència única
- IViewBrowserServiceFactory que manté la implementació Unity reemplaçable
- MonoBehaviour UnityViewBrowserService com a infraestructura Unity llesta per usar
- GoBack segur que llança una excepció descriptiva quan la pila és buida en lloc de fallar silenciosament
- Integració amb el Sistema de Menús, el Sistema de Modals, UI Themes i Game Mode a través dels contractes compartits de Serenity
Quan fer-lo servir
- Projectes on diverses pantalles necessiten un flux de navegació cap enrere coherent sense duplicar la lògica de pila per escena.
- Jocs amb menús, modals o vistes superposades que necessiten restaurar el context anterior de manera fiable.
- Bases de codi que volen netejar l'historial de navegació en les transicions de game mode sense acoblar aquesta lògica a cada menú individual.
- Equips que volen que el suport al botó enrere i a la tecla Escape funcioni de la mateixa manera a tot el projecte.
Sistemes relacionats
Utilitza el View Browser de Serenity quan necessitis una pila de navegació única i provada que comparteixi tot el projecte — perquè tornar enrere funcioni igual en menús, modals i overlays de gameplay sense haver-ho d'escriure cada vegada.
English
Español
Català