Considerando os posts anteriores:
Vamos falar de ORM - https://www.gworks.com.br/post/vamos-falar-de-orm
TOTVS DBAccess, - https://www.gworks.com.br/post/totvs-dbaccess
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.
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
(1) Vantagens da Programação POO - https://www.dio.me/articles/vantagens-da-programacao-orientada-a-objetos-poo
(2) Programação Orientada a Objetos - https://www.alura.com.br/artigos/poo-programacao-orientada-a-objetos
Comments