Professional Documents
Culture Documents
Trabalho de Graduao
Resumo. Este artigo apresenta uma proposta para utilizao do padro Data
Access Object em aplicaes desenvolvidas com Delphi utilizando os
componentes DBExpress. Em seguida descreve uma ferramenta desenvolvida
para alterar o cdigo fonte em arquivos PAS e DFM de aplicaes legadas em
Delphi para empregar essa proposta de utilizao do padro.
Abstract. This work presents a proposal for utilizing Data Access Object
pattern at Delphi applications with DBExpress components. Next describes a
tool developed to modify the source code in PAS and DFM files from legacy
applications in Delphi for utilizing the pattern propose in this work.
1. Introduo
O ambiente de desenvolvimento Delphi um ferramental que permite o
desenvolvimento rpido de aplicaes, pois ele se baseia em arrastar componentes para
a janela, criar ligaes entre esses componentes e alterar suas propriedades. O sucesso
do Delphi se deve pouca exigncia tcnica dos programadores para desenvolver uma
aplicao, pois a maior parte do trabalho esse arrastar e conectar os componentes. A
necessidade de programar linhas de cdigo minimizada com a possibilidade de
codificar todas as regras de negcio na prpria janela onde foram arrastados os
componentes.
Por outro lado, a rapidez e a facilidade em desenvolver as aplicaes dessa
maneira traz srios problemas na manutenibilidade. A reusabilidade baixa pois o
cdigo programado na prpria janela e o tambm devido ao alto acoplamento, pois os
componentes so todos atrelados janela. No Delphi costuma-se programar nas prprias
janelas, logo, a reusabilidade, quando acontece, de janelas e no de regras de negcio.
Entretanto, o Delphi permite o desenvolvimento orientado a objetos, onde
podem se programar as regras de negcios em classes, ou mesmo em componentes, e
conectar esses objetos nas janelas aumentando o nvel de reusabilidade. Contudo, quem
inicia com Delphi, se encanta com as facilidades proporcionadas pelo ambiente e
somente se depara com os problemas de manuteno num segundo momento, quando o
cliente solicita mudanas nos requisitos, ou se deseja aproveitar um projeto para outros
clientes.
Uma das situaes que pode se notar a baixa reusabilidade quanto conexo
com banco de dados. As expresses SQL so informadas diretamente nos componentes,
seja nas janelas ou num Data Module. As mudanas no projeto do banco de dados
exigem acessar componente a componente e alterar as expresses para atender essas
alteraes.
Na ltima dcada tem-se dedicado esforos no estudo e disseminao dos
padres de projeto para aumentar a reusabilidade de software e por consequncia
diminuir o custo de manuteno. Segundo Gamma et al (2000), Valente (2003),
Shalloway e Trott (2004) e Fowler (2006), os padres de projeto permitem a reutilizao
de arquiteturas e projetos bem sucedidos, reaproveitando solues e a experincia dos
modeladores, assim como estabelecendo um vocabulrio comum para os envolvidos no
desenvolvimento melhorando a comunicao entre eles. Alm disso, a adoo de
padres requer adaptao dos projetos, e com isso naturalmente as aplicaes precisam
serem bem arquitetadas para tal reaproveitamento, criando assim um ciclo virtuoso entre
a nova aplicao e os padres j adotados por um equipe.
Na busca de uma soluo para melhorar a manutenibilidade das aplicaes em
Delphi quanto conexo de banco de dados proposto neste trabalho uma estratgia de
adoo do padro de projetos Data Access Object (DAO), que abstrai e encapsula os
mecanismos de acesso a banco de dados (AECE, 2005), adaptado na utilizao de
componentes DBExpress. Tambm demonstrada a ferramenta implementada para
empregar essa estratgia em aplicaes Delphi legadas.
Esse artigo estruturado da seguinte forma: primeiro apresentada uma breve
fundamentao sobre o padro DAO, para em seguida apresentar os componentes
Delphi considerados nesse trabalho; na seo seguinte apresentada a estratgia de
utilizao do padro DAO em aplicaes Delphi; na seo subsequente demonstrado a
ferramenta implementada para alterar projetos em Delphi para utilizar o padro; e por
ltimo so apresentadas as concluses em relao ao estudo feito nesse trabalho.
3. Componentes DBExpress
O pacote de componentes DBExpress est disponvel a partir da verso 7.0 do Borland
Delphi e permite acesso aos banco de dados sem necessidade de configurao ou
aplicaes adicionais no Windows, como acontecia nas verses anteriores (BORLAND,
2005). A conexo e o acesso com os bancos de dados feito com as prprias DLLs
fornecidas pelos fabricantes dos SGBDs.
Os componentes DBExpress abstraem e encapsulam o acesso ao banco de dados,
mas no podem ser considerados a aplicao do padro DAO na sua forma mais pura,
pois eles no utilizam objetos TransferObject. Os dois principais componentes so o
TSQLConnection e TSQLQuery. No componente TSQLConnection se configura o
banco de dados, ou seja, qual a DLL e por consequncia, qual o SGBD a ser acessado. O
componente TSQLQuery responsvel pelo acesso aos dados e nesse componente que
o programador insere as expresses SQL. Ambos os componentes abstraem para o
implementador detalhes do banco de dados, ou seja, os componentes fazem o acesso
DLL enviando as expresses SQL e devolvendo os resultados dessas execues.
considervel e limitada. Por essa razo, cada classe DataAccessObject receber como
parmetro no construtor um objeto TSQLConnection que ser guardado num atributo.
Como os componentes visuais so associados com componentes DataSource
(classe do pacote DataAccess), e esse componente pode ser associado com componentes
TSQLQuery, definiu-se que os mtodos de leitura devem receber como parmetro um
objeto TSQLQuery, e popular seu atributo SQL. Com isso, a classe aqui proposta no
fornece objetos TransferObject. A figura 2 demonstra um exemplo de um mtodo de
leitura de dados.
function TFORNECEDORDADO.SelecionarFornecedor(FQuery : TSQLQuery;
Fo_Cod: Variant): TSQLQuery;
begin
FQuery.SQLConnection := Conecta;
FQuery.Close;
FQuery.SQL.Clear;
FQuery.SQL.Add(Select * From Fornecedor );
FQuery.SQL.Add(Where Fo_Cod= :Fo_Cod );
FQuery.ParamByName(FO_COD).AsString := Fo_Cod;
Result := Fquery;
end;
:=
:=
:=
:=
edNome.Text;
edNomeFantasia.Text;
edInscrEst.Text;
edCNPJ.Text;
...
With QueryBuscaFornec do
begin
Close;
ParamByName('FO_COD').AsInteger
Open;
:= strtoint(edCodigo.Text);
...
6. Concluses
A aplicao de padres de projeto eleva o nvel de qualidade no produto final. Aps
experimentar a ferramenta descrita nesse trabalho numa aplicao real percebeu-se que
o cdigo gerado permite facilidade em sua manuteno, pois eliminou a redundncia, e
concentrou todo o cdigo SQL em classes especficas.
Devido forma como os programadores Delphi esto habituados a
desenvolverem as aplicaes atravs de usar muito componentes, sugere-se que
qualquer nova tcnica ou idia para melhorar o desenvolvimento de aplicaes nessa
linguagem inclua a utilizao de componentes.
Outro ponto importante a ressaltar, que a prtica de novas tcnicas e
paradigmas de desenvolvimento considerem a aplicaes legadas. Existe muito cdigo
no Brasil produzido com Delphi, inclusive com verses anteriores 7.0, e um fator
motivante de novidades que sejam compatveis com o que j faa parte do portflio da
equipe de desenvolvimento.
O texto apresentado nesse artigo levou em considerao esses dois pontos:
props idias para a adoo do padro de projeto DAO usando componentes
DBExpress, e descreveu uma ferramenta para que aplicaes legadas possam usufruir
dessas idias.
Referncias
Ace, I. (2005) Analisando o Microsoft PetShop 3.0. So Paulo. Disponvel em:
<http://www.projetando.net/Sections/ViewArticle.aspx?ArticleID=14>. Acesso em:
07 abr. 2007.
Borland Software Corporation. (2005) Borland Delphi for Microsoft Windows: help.
Version 7.10.3077.
Fowler, M. (2006) Padres de arquitetura de aplicaes corporativas.
Gamma, E. et al (2000) Padres de projeto: solues reutilizveis de software orientado
a objetos.
Valente, L. (2003) Design patterns: padres para projetos.. 24 f. Dissertao (Mestrado
em Computao)-Universidade Federal Fluminense, Niteri. Disponvel em:
<http://www.ic.uff.br/~lvalente/docs/DesignPatterns_Texto.pdf>. Acesso em: 07 abr.
2007.
Shalloway, A.; Trott, J. (2004) Explicando padres de projeto: uma nova perspectiva em
projeto orientado a objeto.
Sun. (2007) Core J2EE patterns: data access object. Disponvel em:
<http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html>.
Acesso em: 15 abr. 2007