O que é MVC
A arquitetura Model-View-Controller ou MVC, como é mais conhecida, é um padrão de arquitetura de software que visa separar a lógica de negócio da lógica de apresentação (a interface), permitindo o desenvolvimento, teste e manutenção isolada de ambos.
Para o sistema Protheus, aqueles que já desenvolveram uma aplicação em AdvPL vão perceber, que justamente a diferença mais importante entre a forma de construir uma aplicação em MVC e a forma tradicional, é essa separação e que vai permitir o uso da regra de negócio em aplicações que tenham ou não interfaces, como Web Services e aplicação automática, bem como seu reuso em outras aplicações.
Arquitetura MVC
A arquitetura MVC, é um padrão de arquitetura de software que visa separar a lógica de negócio da lógica de apresentação (a interface), permitindo o desenvolvimento, teste e manutenção isolados de ambos.
Aqueles que já desenvolveram uma aplicação em AdvPL vão perceber, que justamente a diferença mais importante entre a forma de construir uma aplicação em MVC e a forma tradicional é essa separação. E é ela que vai permitir o uso da regra de negócio em aplicações que tenham ou não interfaces.
A arquitetura MVC possui três componentes básicos:
- Model ou modelo de dados: representa as informações do domínio do aplicativo e fornece funções para operar os dados, isto é, ele contém as funcionalidades do aplicativo. Nele definimos as regras de negócio: tabelas, campos, estruturas, relacionamentos etc. O modelo de dados (Model) também é responsável por notificar a interface (View) quando os dados forem alterados.
- View ou interface: responsável por renderizar o modelo de dados (Model) e possibilitar a interação do usuário, ou seja, é o responsável por exibir os dados.
- Controller: responde às ações dos usuários, possibilita mudanças no Modelo de dados (Model) e seleciona a View correspondente.
Para facilitar e agilizar o desenvolvimento, na implementação do MVC feita no AdvPL, o desenvolvedor trabalhará com as definições de Modelo de dados (Model) e View, a parte responsável pelo Controller já está intrínseca.
Frisando bem, a grande mudança, o grande paradigma a ser quebrado na forma de pensar e se desenvolver uma aplicação em AdvPL utilizando MVC é a separação da regra de negócio da interface. Para que isso fosse possível foram desenvolvidas várias novas classes e métodos no AdvPL.
Principais funções da aplicação em AdvPL utilizando o MVC
Apresentamos agora o modelo de construção de uma aplicação em AdvPL utilizando o MVC. Os desenvolvedores em suas aplicações serão responsáveis por definir as seguintes funções:
- ModelDef: Contém a construção e a definição do Model, lembrando que o Modelo de dados (Model) contém as regras de negócio;
- ViewDef: Contém a construção e definição da View, ou seja, será a construção da interface;
- MenuDef: Contém a definição das operações disponíveis para o modelo de dados (Model).
Cada fonte em MVC (PRW) só pode conter uma de cada dessas funções. Só pode ter uma ModelDef, uma ViewDef e uma MenuDef Ao se fazer uma aplicação em AdvPL utilizando MVC, automaticamente ao final, está aplicação já terá disponível.
- Pontos de Entradas já disponíveis;
- Web Service para sua utilização;
- Importação ou exportação mensagens XML.
O que é a função ModelDef?
A função ModelDef define a regra de negócios propriamente dita onde são definidas
- Todas as entidades (tabelas) que farão parte do modelo de dados (Model);
- Regras de dependência entre as entidades;
- Validações (de campos e aplicação);
- Persistência dos dados (gravação).
Para uma ModelDef não é preciso necessariamente possuir uma interface. Como a regra de negócios é totalmente separada da interface no MVC, podemos utilizar a ModelDef em qualquer outra aplicação, ou até utilizarmos uma determinada ModelDef como base para outra mais complexa.
As entidades da ModelDef não se baseiam necessariamente em metadados (dicionários). ela se baseia em estruturas e essas por sua vez é que podem vir do metadados ou serem construídas manualmente. A ModelDef deve ser uma Static Function dentro da aplicação.
O que é a função ViewDef?
A função ViewDef define como o será a interface e portanto como o usuário interage com o modelo de dados (Model) recebendo os dados informados pelo usuário, fornecendo ao modelo de dados (definido na ModelDef) e apresentando o resultado. A interface pode ser baseada totalmente ou parcialmente em um metadado (dicionário), permitindo:
- Reaproveitamento do código da interface, pois uma interface básica pode ser acrescida de novos componentes;
- Simplicidade no desenvolvimento de interfaces complexas. Um exemplo disso são aquelas aplicações onde uma GRID depende de outra. No MVC a construção de aplicações que tem GRIDs dependentes é extremamente fácil;
- Agilidade no desenvolvimento, a criação e a manutenção se tornam muito mais ágeis;
Mais de uma interface por Business Object. Poderemos ter interfaces diferentes para cada variação de um segmento de mercado, como o varejo.
A ViewDef deve ser uma Static Function dentro da aplicação
O que é a função MenuDef?
Uma função MenuDef define as operações quer serão realizadas pela aplicação, tais como inclusão, alteração, exclusão, etc.
Deve retornar um array em um formato específico com as seguintes informações:
- Título
- Nome da aplicação associada
- Reservado;
- Tipo de Transação a ser efetuada.
E que podem ser:
- para Pesquisar
- para Visualizar
- para Incluir
- para Alterar
- para Excluir
- para Imprimir
- para Copiar
- Nível de acesso;
- Habilita Menu Funcional;
Aplicações com Browses (FWMBrowse)
Para a construção de uma aplicação que possui um Browse, o MVC utiliza a classe FWMBrowse. Esta classe exibe um objeto Browse que é construído a partir de metadados (dicionários). Esta classe não foi desenvolvida exclusivamente para o MVC, aplicações que não são em MVC também podem utilizá-la.
Substituir componentes de Browse;
- Reduzir o tempo de manutenção, em caso de adição de um novo requisito;
- Ser independente do ambiente Microsiga Protheus.
- E apresenta como principais melhorias:
- Padronização de legenda de cores;
- Melhor usabilidade no tratamento de filtros;
- Padrão de cores, fontes e legenda definidas pelo usuário – Deficiente visual;
- Redução do número de operações no SGBD (no mínimo 3 vezes mais rápido);
- Novo padrão visual.
O Browse apresentado automaticamente já terá:
- Pesquisa de registro;
- Filtro configurável;
- Configuração de colunas e aparência;
- Impressão.