top of page

ORM no TOTVS Protheus com a classe GwDataAccess

Considerando os posts anteriores:


Vimos em termos gerais o que é um ORM, que o DBAccess se encaixa nesta categoria de frameworks, mesmo sendo uma solução procedural.


A classe GwDataAccess()

Pensando em como aproximar o TOTVS DBAccess dos paradigmas da Programação Orientada a Objetos - POO, desenvolvemos uma classe em TLPP (TOTVS Language Plus Plus) denominada GwDataAccess() e neste artigo iremos apresentá-la de forma simples com exemplos de como ela pode ser uma ferramenta de produtividade para uso em projetos de desenvolvimento TOTVS Protheus.


Organograma de exemplo
Imagem ilustrativa


Agora chega de papo e vamos aos códigos....


Busca simples (seek)

Acima, um exemplo de como localizar o cliente de nome "GIOVANI SOARES" no respectivo Cadastro de Clientes, tabela "SA1" do TOTVS Protheus.


Com este simples código já podemos observar que toda a interação com a tabela "SA1" passa a ser realizada por um objeto chamado oDao e podemos destacar alguns pontos principais a cerca desta abordagem, portanto:


Encapsulamento

POO se baseia em encapsular situações do mundo real em entidades (Classes) descritas por um conjunto de características (atributos) e ações (métodos).


Conceito

Classe Cliente {

	Atributo Nome
	Atributo Telefone

	Método Comprar( Produto ){
		// código...
	}
}

Encapsular dados em classes, ajuda em:


  • Definir o controle de acessos aos mesmos tornando a aplicação mais segura e íntegra, já que evita que dados sejam alterados de forma imprópria;

  • Tornar a aplicação modular e segregada por responsabilidades, por permitir que classes sofram manutenção sem grande influência no restante do código, desde que sua interface pública (maneira como o restante do código interage com a classe) não mude.


Modelagem natural

Está certo que nem todas as linguagens Orientadas a Objeto possuem uma sintaxe tão legível, mas de forma prática podemos afirmar que o código ficou mais simples e menos verboso se comparado com o código procedural tradicional.


Código procedural clássico

dbSelectArea("SA1")
SA1->(dbSetOrder(retOrder(,'A1_FILIAL+A1_NOME+A1_LOJA')))
SA1->(DbGoTop)
if SA1->(MsSeek('GIOVANI SOARES'))
    ConOut("CPF " + SA1->A1_CGC )
endif

Reutilização de Código

A possibilidade de criar novas classes herdando de classes já existentes e mantendo todas as características (atributos/métodos) da classe original é um fator determinante para facilitar a reutilização de código.


Ou seja, a classe GwDataAccess() pode ser herdada por outra classe (uma classe de negócio, por exemplo), característica esta que não é possível de ser realizada pelo método procedural.


Laço de repetição (while)


Acima um código que imprime no console da aplicação TOTVS Protheus os items e código (tabela SC6) de todos os produtos de um determinado Pedido de Vendas (tabela SC5)



Laço de repetição (while) com query



Download

A classe GwDataAccess() e muitas outras ferramentas estão disponíveis em nosso repositório no GitHub em https://github.com/Gworks-Tecnologia/gworks-library-protheus.


Fique a vontade para baixar, usar e compartilhar :-)


Conclusão

Este post foi escrito pensando principalmente em profissionais que trabalham com o TOTVS Protheus e possuem contato com Advpl/TLPP mas que encontram dificuldades com o conceito de POO, logo, vimos alguns alguns dos príncípios básicos da Programação Orientada a Objetos.


Em breve traremos mais exemplos práticos de utilização da classe GwDataAccess().




Referências























29 visualizações0 comentário

Posts recentes

Ver tudo

Comments


bottom of page