Arquitetura de UI Cross-Platform: O Fim da Navegação Ad-Hoc

Durante muito tempo, o desenvolvimento Delphi (tanto em VCL quanto em FireMonkey) foi dominado pelo clássico ShowModal. Mais recentemente, vemos uma tendência saudável em direção a interfaces baseadas em Abas ou MDI Moderno, onde “acoplamos” formulários dentro de TabSheets ou painéis.
Mas sejamos sinceros: na maioria das vezes, fazemos isso de forma ad-hoc.
O código para abrir uma aba geralmente está espalhado por menus e botões, onde a tela de origem precisa conhecer a classe da tela de destino, instanciá-la manualmente e gerenciar seu ciclo de vida. No fim do dia, você tem uma interface bonita, mas um código “espaguete” por trás, onde tudo depende de tudo.
O que falta para o desenvolvedor Delphi não é uma nova forma de exibir telas, mas sim um Pattern para UI. É aqui que entra o Dext.UI Navigator.
O Navigator traz para o VCL o conceito de “Arquitetura de UI” que vemos em frameworks modernos como Flutter ou Android. Em vez de você instanciar telas, você declara intenções de navegação.

1. O Fim do Acoplamento Visual (VCL & FMX)
Seção intitulada “1. O Fim do Acoplamento Visual (VCL & FMX)”Com o Navigator, sua tela de listagem de clientes não conhece a unidade da tela de edição. Elas são completamente agnóstico entre si — e isso funciona tanto para Desktop quanto para Mobile. O Navigator atua como o mediador que conhece as rotas e sabe como transportar dados (Contexto) entre elas de forma segura e tipada.
// Você pede a navegação por tipo ou rota, o Navigator cuida do resto.Navigator.Push(TCustomerEditFrame, TValue.From(CurrentCustomer));2. O Poder dos Middlewares
Seção intitulada “2. O Poder dos Middlewares”Lembra daquela tela que só administradores podem ver? No modelo tradicional, você coloca um if no OnClick de cada botão. Com o Navigator, você usa Middlewares.
Você define uma regra global: “Todas as rotas marcadas como Admin precisam de autenticação”. O Navigator intercepta o pedido de navegação, verifica a regra e, se falhar, bloqueia a transição ou redireciona para o Login.
Navigator.UseMiddleware(TAuthMiddleware.Create(AuthService));O Gancho para o Futuro: VCL com “Feeling” de Web
Seção intitulada “O Gancho para o Futuro: VCL com “Feeling” de Web”Talvez o maior benefício oculto do Navigator seja como ele aproxima seu código Delphi das arquiteturas Web modernas. Ao usar Middlewares em um pipeline de navegação, você está estruturando seu sistema de uma forma que se assemelha muito a uma aplicação Web (onde o backend e a UI se comunicam via rotas e contratos), mas sem a necessidade imediata de uma Web API complexa.
Isso pavimenta o caminho. Se amanhã você decidir migrar partes do seu sistema para a Web ou compartilhar lógica entre uma versão Desktop e Mobile, o seu código de navegação e as regras de negócio (encapsuladas nos Middlewares) já estarão prontos para serem reutilizados na estrutura do Dext.

3. Histórico e Ciclo de Vida
Seção intitulada “3. Histórico e Ciclo de Vida”Assim como no navegador do seu celular, o Navigator mantém uma Pilha de Navegação. O comando Navigator.Pop volta para a tela anterior exatamente como ela estava, sem você precisar gerenciar o estado manualmente.
E com o hook INavigationAware, suas telas sabem quando estão entrando ou saindo da visão, permitindo carregar ou salvar dados no momento exato:
procedure TCustomerEditFrame.OnNavigatedTo(const Context: TNavigationContext);begin // Carrega o cliente recebido no contextoend;Bônus: Adapters (MDI, Tabs ou Painel?)
Seção intitulada “Bônus: Adapters (MDI, Tabs ou Painel?)”A beleza do Navigator é que a lógica de negócio é separada da visualização. Quer que seu sistema use Abas (TPageControl)? Use o TPageControlAdapter. Prefere o estilo clássico MDI? Use o TMDIAdapter. E se estiver no FMX? Basta usar um Adapter específico para as telas do FireMonkey. A sua lógica de Navigator.Push continua exatamente a mesma.
4. UI 100% Testável
Seção intitulada “4. UI 100% Testável”Uma das maiores dores de não usar um Pattern de UI é que testar a navegação é quase impossível sem automação de interface pesada. Com o Dext Navigator, você pode escrever Testes Unitários para validar se, ao clicar em “Novo”, o sistema realmente tentou navegar para a tela correta com os parâmetros certos.
Exemplo do projeto Desktop.MVVM.CustomerCRUD: UI moderna rodando lado a lado com testes de ViewModel e Controller.
Conclusão: Modernizar é uma escolha estratégica
Seção intitulada “Conclusão: Modernizar é uma escolha estratégica”Modernizar o Delphi não é apenas trocar para Linux ou Web. É trazer os padrões que venceram na engenharia de software moderna (SPA, Middlewares, DI) para dentro do VCL.
O Dext Framework não é apenas sobre Backend; é sobre dar ao desenvolvedor Delphi o arsenal para criar aplicações desktop que não parecem ter sido feitas em 1995.
👉 Conheça o Dext: github.com/cesarliws/dext 📚 Aprofunde-se no livro: HotSite do Livro 📖 Documentação do Navigator: Leia os Detalhes Técnicos