Uso da propriedade canNavigate

Ao entrar no Web Framework, o sistema precisa descobrir quais diretórios devem ser exibidos no menu Ir Para. O comportamento atual é que sejam exibidos os diretórios que possuem a propriedade de x-class canNavigate com valor true.

Para descobrir quais diretórios possuem esta propriedade habilitada, o sistema inicia uma exploração da árvore de classes a partir da classe Raiz. Se a classe não configurar esta propriedade, suas filhas são avaliadas. Este processo é executado recursivamente até que se encontre uma classe que defina a propriedade canNavigate.

Visto que habilitados a propriedade canNavigate apenas nas classes que são módulos do Sistema UNUM, a princípio esta implementação teria um problema de desempenho, pois teríamos que executar praticamente todos os x-class do sistema. Para evitar este comportamento, temos a possibilidade indicar que um ramo não será navegável no menu Ir Para definindo a propriedade canNavigate com false. Desta forma, suas filhas não precisam ser exploradas.

Se observamos a nossa árvore de classes, temos 3 grandes ramos:

    • Dados

    • Configuração

    • products

Os dois primeiros não podem conter processos ou relatórios, portanto são configurados com canNavigate false. Esta configuração garante que todos os x-class dentro destes ramos não serão avaliados desnecessariamente na inicialização do Web Framework. O diretório products não possui esta configuração, pois é nele que estão os processos e relatórios dos módulos.

No passado, products era utilizado apenas para guardar bibliotecas e processos, portanto a busca de diretórios navegáveis neste ramo era eficiente. No entanto, há alguns anos atrás, optamos por mover as configurações existentes em /Configurações para /products/PRODUTO/configuration.

Sem perceber, criamos um problema de desempenho com esta alteração, pois todas as configurações migradas estão sendo avaliadas no momento da inicialização do Web Framework. Este problema causa uma degradação de performance e aumento do consumo de memória desnecessário. Para corrigir o problema, basta criar um x-class nas classes "configuration" dos produtos, com o trecho abaixo:

this.canNavigate = false;

Além de configuration, é recomendado que todas as classes filhas de /products/PRODUTO/ que não contenham módulos sejam configuradas com canNavigate false. O padrão de configuração do módulo UNUMWebFramework pode ser adotado como exemplo.