Clique aqui para ler esse artigo em PDF.
POO
Uma abordagem prática no desenvolvimento de aplicações OO no Delphi – Parte 2
Como discutido na edição anterior, na primeira parte deste artigo, o paradigma orientado a objetos de desenvolvimento de software está cada vez mais se tornando o padrão de desenvolvimento. No entanto, os reais benefícios da orientação a objetos são efetivamente alcançados quando se possui domínio efetivo de conceitos da orientação a objetos e da linguagem de programação utilizada, além de assuntos co-relacionados, como padrões de projeto e persistência.
Desta forma, na primeira parte deste artigo foi apresentado um estudo de caso utilizado para exemplificar o desenvolvimento de software orientado a objetos, além da definição de todas as classes, métodos e atributos do modelo. Foi apresentado ainda o conceito de mapeamento objeto-relacional e como utilizar esta abordagem no escopo do estudo de caso apresentado. Por fim foi definida a estratégia de conexão com o banco de dados, além de ter sido apresentada a definição das classes responsáveis pela manipulação e persistência dos objetos (Classes DAO).
Nesta segunda parte é apresentada a implementação da estratégia de persistência de objetos utilizada, além de exemplos e codificação de persistência e manipulação dos objetos no banco de dados relacional.
Classes de Persistência
Ao final da primeira parte deste artigo foi definida a estratégia de persistência e manipulação dos objetos. Foi possível apresentar o padrão de projeto DAO (Data Access Object), que busca estreitar os benefícios da orientação a objetos com a maturidade do banco de dados relacional.
A seguir serão tratadas as implementações dos métodos de persistência das classes FuncionarioDiaristaDAO e FuncionarioDAO, cobrindo assim um exemplo completo envolvendo um funcionário diarista, tratando inclusive a associação desse com um departamento, conforme definido no modelo de domínio.
Para a definição dos demais métodos das classes DAO, cujos códigos são semelhantes aos demonstrados, basta realizar poucas modificações, principalmente nas expressões em SQL codificadas.
Na Listagem 1 está definido o Persistir da classe FuncionarioDiaristaDAO. Esse método é responsável por persistir as informações obtidas de um objeto da classe de domínio FuncionarioDiarista e armazená-las no banco de dados.
Listagem 1. Definição do Persistir da classe FuncionarioDiaristaDAO
1.function FuncionarioDiaristaDAO.Persistir(
2. pFuncDia: FuncionarioDiarista): Boolean;
3.var
4. vDataModule: TdtmdlDados;
5.begin
6. result := False;
7. vDataModule := TdtmdlDados.Create(nil);
8. vDataModule.clntdtstPrincipal.Close;
9.if pFuncDia.getOID = '' then
10.begin
11. pFuncDia.setOID(self.GerarOID);
12. vDataModule.sqldtstPrincipal.CommandText :=
13.'select OID, Nome, Tipo, Departamento, NumDias,'+
' ValorDia from FUNCIONARIO where OID is null';
14. vDataModule.clntdtstPrincipal.Open;
15. vDataModule.clntdtstPrincipal.Insert;
16. vDataModule.clntdtstPrincipal.FieldByName(
'OID').AsString := pFuncDia.getOID;
17.end
18.else
19.begin
20. vDataModule.sqldtstPrincipal.CommandText :=
21.' select OID, Nome, Tipo, Departamento, '+
'NumDias, ValorDia from FUNCIONARIO where OID = ''' +
pFuncDia.getOID + '''';
22. vDataModule.clntdtstPrincipal.Open;
23. vDataModule.clntdtstPrincipal.Edit;
24.end;
25.vDataModule.clntdtstPrincipal.FieldByName(
'NOME').AsString := pFuncDia.getNome;
26.vDataModule.clntdtstPrincipal.FieldByName(
'TIPO').AsString := 'D';
27.vDataModule.clntdtstPrincipal.FieldByName(
'DEPARTAMENTO').AsString :=
pFuncDia.getDepartamento.getOID;
"
[...] continue lendo...