TDG ou DAO?

6 respostas
Daniel_Quirino_Olive

Martin Fowler, um cara com mania de Aristóteles, resolver dar (outros) nomes a padrões e arquiteturas existentes. IoC (Inversion of Control) mudou seu nome para DI* (Dependency Injection) e DAO (Data Access Object) foi rebatizado com o nome de TDG (Table Data Gateway).

Segundo Fowler, TDG é uma das 3 especializações do DAO: uma que trata de acesso a dados relacionais (a própria TDG), uma que trata de acesso a dados hierárquicos (HDG) e outra que trata de acesso a dados em arquivos binários/texto (SDG, de Stream Data Gateway).
Mas será que estes nomes são realmente adequados?

No caso dos *DGs, não. Afinal desta forma, você estaria informando, desnecessariamente, ao usuário com qual tipo de fonte de dados, por exemplo, o objeto MyTDG vai lidar, sendo que só bastaria ao usuário saber que ele vai obter os dados que ele precisa dada uma fonte de dados qualquer (seja ela um XML, um banco de dados relacional ou um arquivo binário), que é a idéia do padrão DAO.

[size=“9”]*- sobre DI, o Carlos pode falar melhor[/size]

p.s.: esqueçam tudo o que eu falei sobre HDG e SDG. ESQUEÇAM!! eles não existem de fato.

6 Respostas

dsiviotti

Eu já até votei, mas qual é realmente a implicação nesta mudança de nomes? As classes DAO vão ter TDG no final ou tem mais coisa?

Daniel_Quirino_Olive

Além disso, você presupõe que os TDG servem [size=“24”]apenas[/size] para acessar dados em um banco de dados relacional, enquanto o DAO serve [size=“24”]também[/size] (quando a interface é bem feita) para acessar dados em XML, SGBDs, arquivos texto…

cv1

Bom, no fundo, no fundo, acho que TDG e DAO sao o mesmo pattern, mas a literatura sobre eles eh diferente. No entanto, a definicao do TDG eh bem mais simples, e fechadinha: um TDG manipula apenas uma tabela e um tipo de objeto, enquanto que trabalhando com DAOs eh comum ver alguns monstrinhos (vide DAO generico do GUJ 2).

Eu gostei da ideia do TDG: eh um gateway mais simples do que um DAO qualquer, pq ele tem menos preocupacoes, e nao precisa ser abstrato nem implementar uma interface especial, apesar de todas elas serem extremamente semelhantes (interface no sentido OOP da coisa, nao interfaces Java).

Sobre Inversion of Control versus Dependency Injection, o proprio artigo do Fowler justifica bem a decisao. Deem uma lida: http://www.martinfowler.com/articles/injection.html

Daniel_Quirino_Olive

Sei lá, Carlos. Pelo que você disse, TDG é bem diferente de DAO. DAO é um pattern mais abstrato e totalmente indiferente de fonte de dados, o que não é bem a proposta do TDG. Talvez criar um outro pattern ao invés de redefinir um já existente teria sido a coisa certa a ser feita.

Ironlynx

Concordo plenamente…termino de fazer um estudo forte de DAO,vira TDG…começo a estudar para certifiicação,lança a 1.5.0,ainda fiquei 2 meses sem codar…PQP!Vou ter q alocar mais RAM(e de um barramento maior,pois a resposta tah lenta)…pro meu cérebro!!! :evil:

_fs

Desculpem-me por desvirtuar o tópico e ser um pouco preguiçoso, mas vocês tem um link que explica esse monte de siglas bacanas?

Valeu!

Criado 11 de fevereiro de 2004
Ultima resposta 11 de fev. de 2004
Respostas 6
Participantes 5