Menu
Este documento descreve e fundamenta a forma como foi modelado e implementado o Menu.
Desenho
A solução adotada passa pela existência de 4 entidades: entidade Menu, que representa uma página de menu com várias operações; entidade IdentityMenu que se relaciona com a entidade Menu e tem como objetivo identificar um menu personalizado para um role específico. Um Menu possui um conjunto de MenuItem’s, que são as operações propriamente ditas disponíveis no menu, podendo levar a ações finais (abrir uma view por exemplo) ou levar a outros submenus.
O modelo de entidades definido é o seguinte:

A entidade Menu e a entidade MenuItem possuem, além de uma caption normal, uma caption localizada, para que seja possível ao utilizador visualizar o menu na sua língua respetiva.
Modelo de Serviços
A nível de serviços, existe um sobre a entidade Menu. Este serviço possui duas service operations associadas:
- GetRootMenu: service operation que devolve o menu root e todos os menuitems associados.
- GetNamedMenu(name): service operation que devolve um menu específico.
São estas service operations que permitem a navegação através do menu, sendo feito o pedido de um menu sempre que se navega para dentro de um menu.

Arquitetura
A arquitetura lógica pode ser definida no seguinte esquema:
