Estrutura básica de um fonte MVC

Já sabemos que o MVC é uma arquitetura e cada linguagem implementa ela da melhor forma possível, vou mostrar nesse post quais os elementos essenciais para um programa escrito usando MVC.

Diferente de outras linguagens, no AdvPL o desenvolvedor manipula apenas os componentes de View e Model, deixando o Controller na responsabilidade do framework.

Escrevendo sua aplicação em MVC as funcionalidades abaixo serão nativas para seu programa:

  • Pontos de Entrada;
  • WebService;
  • Independência de dicionário de dados;
  • Possibilidade de usar para rotina automática.

Quando falamos de MVC penso em 3 componentes que você precisa compreender: Model, View e Estrutura de Dados.

Model

O Model é o componente responsável pela regra de negócio. Validações? Definição de como os componentes se relacionam? Persistência dos dados? Tudo isso é responsabilidade do Model.

No AdvPL o componente model é sempre definido em uma função estática chamada ModelDef, “Def” é justamente a abreviatura de “Definição”, logo “ModelDef” significa definição do modelo de dados.

Estou frisando a palavra definição porque uma vez que o Model está definido você pode carregar o model da aplicação em qualquer momento e realizar a operação que desejar, como por exemplo uma inclusão de registro.

O Model trabalha sozinho, ele não precisa de uma interface gráfica. Podemos usar o model em webservice, em rotina automática e até usar o model da aplicação X para ser a base do model da aplicação Y.

View

A View é a responsável pela interface gráfica e comunicação com o usuário. Quer fazer um gráfico? Precisa criar pastas para dividir a tela? Quer fazer uma validação para impedir que a tela abra? Quer colocar uma ação para quando a tela fechar? Tudo isso é configurado na View, toda ação que envolver interface gráfica fica na View.

No AdvPL o componente View é sempre definido em uma função chamada ViewDef, novamente “Def” é justamente a abreviatura de “Definição”, logo “ViewDef” significa definição da interface gráfica. A View não funciona sozinha, ela é apenas a “casca” de apresentação dos dados para o usuário, os dados reais estão no componente Model, logo para uma View existir ela obrigatoriamente precisa estar associada a um Model.

Estrutura de Dados

O MVC é independente de dicionário de dados do Protheus, dessa forma ele pode funcionar com diversas aplicações escritas em AdvPL, para isso se tornar possível foi criado o componente de Estrutura de Dados.

Estrutura de Dados é um componente que representa uma tabela, ele possui campos, validações de campos, tabela, chave primária, pastas, inicializador padrão, entro outros. Quer dizer então que a Estrutura de Dados é igual ao Dicionário de Dados? Não! Ela tem a mesma estrutura, todavia os dados para compor ela podem vir de um dicionário de dados ou podem vir de um tabela temporária, ou de qualquer outro lugar que o desenvolvedor deseje.

A Estrutura de Dados é obrigatória para o MVC, cabe ao desenvolvedor decidir se vai usar como base o dicionário de dados ou não. Além disso, a Estrutura de Dados é dividida em Model e View. A Estrutura do Model possui todas as características de campo que são relacionadas a regra de negócio (como validação, inicializador padrão, etc) e a Estrutura da View possui as características relacionadas a interface gráfica (como consulta padrão, pasta, agrupamento)

Importante!

As funções ModelDef, ViewDef e MenuDef precisam obrigatoriamente ser estáticas e devem ser únicas dentro de um fonte, pois o Controller procura por elas para criar a aplicação. Caso as funções sejam de outro tipo o seu programa não funcionará corretamente.

Ok, mas e o browse?

Porque eu não falei sobre browse já que estamos falando do essencial para uma aplicação MVC? O componente browse é genérico, gosto de descreve-lo como  “Um componente gráfico que exibe registros na tela e possibilita ações para o usuário, podendo os dados serem baseados em um array, tabela ou arquivo temporário”.

O browse não faz parte do MVC, ele é um componente usado com AxCadastro, Modelo 1, Modelo 3, programas que não tem por objetivo realizar um CRUD e também é usado pelo MVC.

Como a maioria dos programas escritos em MVC tem por finalidade um CRUD, encontramos o browse na maioria dos fontes, mas que fique claro, ele não é obrigatório. Você é totalmente livre pra escrever uma aplicação MVC sem browse, se isso for aderente ao seu objetivo.

Então.. o menu também não é essencial né?

O Menu não é obrigatório para uma aplicação, mas se você criar um browse, ele passa a ser. No menu você vai definir quais ações estarão disponíveis para sua aplicação, por exemplo, pode definir que é possível incluir e alterar um registro, entre outros.

No AdvPL o Menu é definido pela função MenuDef, que deve ser estática e deve existir somente uma função MenuDef por fonte. A função MenuDef é usada pelo Browse para exibir ao usuário as ações disponíveis para a aplicação.

Em resumo o seu fonte MVC , na maioria das vezes, vai possuir a estrutura abaixo:

User Function SeuFonteMVC()
 //Criação do browse
Return

Static Function MenuDef()
 // Definição das ações para o browse
Return

Static Function ModelDef()
 // Criação do Model
 // Criação da estrutura de dados
Return

Static Function ViewDef()
 // Criação da View
 // Criação da estrutura de dados
Return
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s