Usina BRAdvPL Guia
Entrar
← Todos os tópicos
FUNDAMENTOPublicado

Arquitetura MVC em AdvPL

ModelDef() · ViewDef() · MenuDef()

Organize regras de negócio, apresentação e operações de uma rotina Protheus com o padrão MVC.

MVCFrameworkModelDefViewDefMenuDefProtheus
01 · VISÃO GERAL

Visão geral

No MVC do Framework AdvPL, ModelDef define o modelo e as regras de negócio, ViewDef constrói a interface ligada ao modelo e MenuDef declara as operações disponíveis. O controller é tratado pelo framework. Essa separação permite reutilizar o modelo em interfaces, rotinas automáticas e integrações. O manual estudado também documenta modelos com uma ou várias entidades, validações, grids, estruturas, pontos de entrada, Web Services e reutilização de componentes.

02 · SINTAXE

Sintaxe

ModelDef() · ViewDef() · MenuDef()

Parâmetros

ModelDef
Função estáticaObrigatório

Cria e devolve o modelo de dados, suas entidades, relações, validações e persistência.

ViewDef
Função estáticaObrigatório

Cria e devolve a interface, associa o modelo e organiza formulários, grids e contêineres.

MenuDef
Função estáticaObrigatório

Devolve as operações da rotina; FWMVCMenu() pode gerar o conjunto padrão.

03 · EXEMPLO PRÁTICO

Estrutura mínima de uma rotina MVC

#Include "TOTVS.ch"
#Include "FWMVCDef.ch"

User Function CadCliente()
    Local oBrowse := FWMBrowse():New()

    oBrowse:SetAlias("SA1")
    oBrowse:SetDescription("Cadastro de clientes")
    oBrowse:Activate()
Return

Static Function ModelDef()
    Local oStruct := FWFormStruct(1, "SA1")
    Local oModel  := FWFormModel():New("CADCLIENTEM")

    oModel:AddFields("CLIENTE", NIL, oStruct)
    oModel:SetDescription("Modelo de clientes")
Return oModel

Static Function ViewDef()
    Local oModel  := FWLoadModel("CADCLIENTE")
    Local oStruct := FWFormStruct(2, "SA1")
    Local oView   := FWFormView():New()

    oView:SetModel(oModel)
    oView:AddField("VIEW_CLIENTE", oStruct, "CLIENTE")
    oView:CreateHorizontalBox("TELA", 100)
    oView:SetOwnerView("VIEW_CLIENTE", "TELA")
Return oView

Static Function MenuDef()
Return FWMVCMenu("CADCLIENTE")
Resultado esperado

O browse inicia a rotina; ModelDef concentra o modelo, ViewDef liga a interface ao submodelo e MenuDef fornece as operações padrão. Ajuste alias, IDs e regras ao seu projeto.

BOAS PRÁTICAS
  • Mantenha regras de negócio no Model; a View deve cuidar da apresentação e da interação.
  • Use identificadores únicos e estáveis para o modelo, submodelos, componentes da View e boxes.
  • FWFormStruct(1, cAlias) gera estrutura para o Model; FWFormStruct(2, cAlias) gera estrutura para a View.
  • O primeiro componente do modelo deve ser um formulário; detalhes com múltiplas linhas são adicionados como grid e relacionados ao componente pai.
  • Use Help() para comunicar validações do Model: o framework conserva a mensagem até o retorno à interface.
  • Consulte a documentação da versão usada antes de adotar assinaturas históricas, classes antigas ou integração XML descrita pelo manual.
ARMADILHAS COMUNS
  • Não use MsgAlert(), Alert() ou outros componentes visuais dentro do Model; isso quebra a separação de responsabilidades.
  • Cada fonte MVC deve conter apenas uma ModelDef, uma ViewDef e uma MenuDef.
  • Não confunda o ID do modelo com o nome de uma User Function quando isso puder colidir com pontos de entrada.
  • O PDF local foi gerado em 2018 e apresenta APIs e exemplos históricos; disponibilidade e comportamento dependem da LIB e do release atuais.
  • Não grave diretamente na View quando a regra pertence ao Model.

Conteúdos relacionados

REFERÊNCIAS
  1. TOTVS. AdvPL utilizando MVC. Manual local, 134 páginas; arquivo gerado em 1 jun. 2018. Seções principais: arquitetura e funções, p. 6–10; uma entidade, p. 14–19; múltiplas entidades, p. 20–27; tratamentos, p. 28–67; funções auxiliares, p. 68–70; rotina automática, p. 82–93; pontos de entrada, p. 94–100; Web Services, p. 101–110; NEW MODEL e reutilização, p. 111–130.
  2. TOTVS. Manual AdvPL utilizando MVC, versão 4.0. TDN.
  3. TOTVS. FWFormModel. TDN.
  4. TOTVS. FWFormView. TDN.
  5. TOTVS. Exemplos MVC. TDN.
Situação
Publicado
Página criada em
Última revisão em
Idioma original
Português
Revisão
Usina.BR