<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Duvidas sobre o pattern DAO!"]]></title>
		<link>http://www.guj.com.br/posts/list/19.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Duvidas sobre o pattern DAO!"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[  Gostaria de saber se para realizar operacoes CRUD os metodos das minhas DAOs podem ser declarados como static. Tenho essa duvida pois estou com um projeto "bem pequeno" e nao terei necessidade de recorrer a heranças entre as DAOs, sendo assim, não vejo o porque continuar programando pensando nos objetos já que para mim é mais interessante entender os metodos como pertencentes a classe e nao ao objeto, consequentemente, declara-los como static! Resumindo: gostaria que minhas DAOs se parecessem como classes utilitarias.<br /> <br />  Obrigado.<br /> <br />  ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/681628/duvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/681628/duvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Sat, 9 May 2009 10:57:30]]> GMT</pubDate>
				<author><![CDATA[ Vini Fernandes]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ Sinceramente, se o projeto for pequeno mesmo, acho que nem de DAO você precisa.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/681635/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/681635/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Sat, 9 May 2009 11:39:17]]> GMT</pubDate>
				<author><![CDATA[ tnaires]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[  Entao cara, mas eu posso ou nao declarar meu metodos como static?? Isso rompe com a definição do pattern DAO?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/681636/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/681636/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Sat, 9 May 2009 12:02:13]]> GMT</pubDate>
				<author><![CDATA[ Vini Fernandes]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ Você não deveria se importar com isso cara, use o que for mais adequado ao seu projeto. Ficar nessa neura de seguir ou não seguir os padrões ao pé da letra atrapalham muito as tomadas de decisão.<br /> <br /> Mas já que isso é tão importante, faça-se a seguinte pergunta: qual a função do DAO? Depois faça a próxima pergunta: se eu tornar os métodos estáticos, meu DAO vai deixar de desempenhar a função que determinei na pergunta anterior?<br /> <br /> Detalhes de implementação de um padrão não deveriam ser mais importantes que o conceito. A gangue dos quatro ilustrou o uso dos padrões de projeto com uma das linguagens mainstream da época - C++ - que não possuía o conceito de interfaces, apenas de classes abstratas. A literatura atual ilustra exemplos em Java e em C# de utilização de padrões que usam interfaces ao invés de classes abstratas. Aí eu pergunto: um Strategy que usa interfaces ou enumerations deixou de ser um Strategy só porque a definição tomada como referência utilizava classes abstratas?<br /> <br /> Resumindo: se você vê que é o melhor - e não há ninguém melhor que você mesmo pra decidir isso - escreva seu DAO com métodos static e seja feliz.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/681637/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/681637/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Sat, 9 May 2009 12:17:31]]> GMT</pubDate>
				<author><![CDATA[ tnaires]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ Se vc pensar na utilizacao de um metodo static em um DAO, nao vejo problemas ao usar. E é umas das formas mais adequadas de criar os metodos em seu DAO.<br /> Mas pense um pocuo tb no que o tnaires disse.<br /> <br /> [ ]s,]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/681647/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/681647/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Sat, 9 May 2009 13:24:08]]> GMT</pubDate>
				<author><![CDATA[ mateusprado]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ Bem eu não costumo usar métodos estaticos nos meu DAOs, e também não criu várias quantidade de DAOs para cada objeto de négocio, tais como, ClienteDAO, ProdutoDAO. etc....  Eu tenho um DAO generico com diversos métodos. <br /> <br /> eu tenho uma classe abstrata chamada SimpleDAO e uma classe concreta chamada HibernateDAO. Durante todo meu projeto utilizo essa classe generica caso eu precisar de algum recurso especifico eu faço uma composição de classe ao inves de herança.<br /> <br /> <br /> Abraços<br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/681876/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/681876/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Sun, 10 May 2009 14:46:05]]> GMT</pubDate>
				<author><![CDATA[ paulofafism]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=Vini Fernandes] Entao cara, mas eu posso ou nao declarar meu metodos como static?? Isso rompe com a definição do pattern DAO?[/quote]<br /> <br /> Sim!!!!!!!<br /> Se vc está pensando em usar métodos estáticos vc ainda nem sabe o que é um DAO. <br /> <br /> Um DAO é um [u]objeto[/u], logo, não pode feito com métodos estáticos.<br /> <br /> Quanto é que vocês vão entender que não existe essa historia de "projeto pequeno" ?<br /> Acha que porque o projeto é "pequeno" tem o direito a fazer cambiarra ? Não!<br /> <br /> E projeto nunca são pequenos. Eles começam pequenos. Nunca ouviu falar em evoluir o software? <br /> <br /> Pense grande e use os padrões como deve ser. Se não sabe usar os padrões, aprenda ; ou então não os use.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/681895/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/681895/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Sun, 10 May 2009 17:01:08]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=mateusprado]Se vc pensar na utilizacao de um metodo static em um DAO, nao vejo problemas ao usar. E é umas das formas mais adequadas de criar os metodos em seu DAO.<br /> [/quote]<br /> <br /> ??? o quê ??  Uma das formas mais adquadas ?   De onde raios saiu isso ? Se existem formas desadequadas essa ganha de longe de todas as outras.<br /> <br /> O DAO para começo de conversa é um serviço definido por uma interface! não ha como colocar métodos estáticos em interfaces. Apenas isso já deveria servir de pista para concluir que DAOs não se definem com métodos estáticos!<br /> <br /> Aliás métodos estáticos não devem ser usados. É o tipo de coisa que apenas os profissionais podem usar , do tipo "não faça isto em casa". Eles são perigosos e não são OO.  Isso é outra pista para concluir que DAOs não se definem com métodos estáticos.<br /> <br /> DAOs não se definem com métodos estáticos.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/681897/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/681897/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Sun, 10 May 2009 17:05:19]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=paulofafism]<br /> eu tenho uma classe abstrata chamada SimpleDAO e uma classe concreta chamada HibernateDAO. <br /> [/quote]<br /> <br /> Porquê em pleno seculo XXI quase 2010 as pessoas ainda fazem isto ? <br /> <br /> Será assim tão difícil entender que se o Hibernate é usado não ha como modificar o sistema para utilizar outro DAO apenas alterando a classe ? <br /> <br /> Quem não acredita, experimente! Tente implementar um DAO JDBC puro com a mesma interface que o HibernateDAO. Boa Sorte! <br /> <br /> Não se enganem. Isso só cria um monte de interfaces e classes a mais no projeto. Totalmente desnecessárias. <br /> <br /> Quem usa o Hibernate ou JPA nem deveria pensar em usar DAO. De quem é a culpa do uso do DAO estar tão enraizado nas más práticas de programação atuais ?  ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/681899/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/681899/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Sun, 10 May 2009 17:09:07]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ <a class="snap_shots" href="http://books.google.com.br/books?id=1dx34EMVyi8C&dq=dao+patterns+martin+fowler&printsec=frontcover&source=bl&ots=1v_wl3TK9H&sig=QU6UjNpiMX3lpTgT4_bb5pFsRf8&hl=pt-BR&ei=kHwHSp_MLIeJtgfGv_WRBw&sa=X&oi=book_result&ct=result&resnum=1#PPP1,M1" target="_blank" rel="nofollow">http://books.google.com.br/books?id=1dx34EMVyi8C&dq=dao+patterns+martin+fowler&printsec=frontcover&source=bl&ots=1v_wl3TK9H&sig=QU6UjNpiMX3lpTgT4_bb5pFsRf8&hl=pt-BR&ei=kHwHSp_MLIeJtgfGv_WRBw&sa=X&oi=book_result&ct=result&resnum=1#PPP1,M1</a><br /> <br /> <br /> <a class="snap_shots" href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html" target="_blank" rel="nofollow">http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html</a>]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/681937/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/681937/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Sun, 10 May 2009 20:44:03]]> GMT</pubDate>
				<author><![CDATA[ mateusprado]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote]Porquê em pleno seculo XXI quase 2010 as pessoas ainda fazem isto ?<br /> <br /> Será assim tão difícil entender que se o Hibernate é usado não ha como modificar o sistema para utilizar outro DAO apenas alterando a classe ?<br /> <br /> Quem não acredita, experimente! Tente implementar um DAO JDBC puro com a mesma interface que o HibernateDAO. Boa Sorte!<br />  [/quote]<br /> <br /> Ai que você se engana meu amigo. Logico que da sim para utilizar outro DAO, tanto Hibernate, JPA ou JDBC e eu fiz a mesma coisa que vc fez implementei um DAO usando JDBC e outro usando JPA, para testar a flexibilidade da aplicação caso eu mudasse de tecnologia. E funcionou perfeitamente e oolha que minha classe DAO tem diversos métodos. Eu não saio instânciando meus objeto diretamente em minha aplicação:<br /> <br /> [code]SimpleDAO dao = new HibernateDAO();[/code]<br /> <br /> Ao invés disso tenho uma classe Factory<br /> <br /> [code]SimpleDAO dao = DAOFactory.getDAO(AplicationContext.getContext());[/code]<br /> <br /> A classe [b]ApplicationContext[/b]  e a classe onde da inicio ao meu sistema startando as configurações principais. basta so eu alterar essa classe e pronto. Posso alterar para outro contexto de aplicação usando DAO, JPA ou JDBC.<br /> Basta apenas usar a classe SimpleDAO que é abstrata.<br /> <br /> [quote]Não se enganem. Isso só cria um monte de interfaces e classes a mais no projeto. Totalmente desnecessárias.<br /> <br /> Quem usa o Hibernate ou JPA nem deveria pensar em usar DAO. De quem é a culpa do uso do DAO estar tão enraizado nas más práticas de programação atuais ?[/quote]<br /> <br /> Monta de interfaces? Nãoo é para tanto. Para que vou criar uma interface chamada ClienteDAO, ProdutoDAO, ForncedorDAO, Ai depois você vem criando classes concretas para cada interface e por ai vai.... Isso sim não tem necessidade de criar, falta de tempo tremenda.<br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/681994/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/681994/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Mon, 11 May 2009 06:53:38]]> GMT</pubDate>
				<author><![CDATA[ paulofafism]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ Sr. [b]Vini Fernandes[/b],<br /> <br />    Utilizar métodos estaticos em DAOs não é uma boa idéia.<br /> <br />    E realmente, como já disseram antes, é melhor pensar que o software será grande um dia. O software "pequeno" é apenas uma chance de vc ter o controle e uma visbilidade maior sobre o que está sendo feito; isto é bom porque vc pode ver / manipular os detalhes da tecnologia com maior facilidade.<br /> <br />    Normalmente as pessoas começam a se interessar pelos métodos estaticos pelo fato de vc poder submeter execuções a partir de qualquer lugar do software; complicou um pouco o fluxo a pessoa logo já escreve MeuQueridoDao.arrumaTudoAi() e pronto.<br />    Não sei se esse é o seu caso, se for saiba que isso causa desestruturação no software fazendo com a aplicação da OO seja muito fraca.<br /> <br /> <br /> flws<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/682026/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/682026/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Mon, 11 May 2009 07:43:08]]> GMT</pubDate>
				<author><![CDATA[ fantomas]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=paulofafism][quote]Porquê em pleno seculo XXI quase 2010 as pessoas ainda fazem isto ?<br /> <br /> Será assim tão difícil entender que se o Hibernate é usado não ha como modificar o sistema para utilizar outro DAO apenas alterando a classe ?<br /> <br /> Quem não acredita, experimente! Tente implementar um DAO JDBC puro com a mesma interface que o HibernateDAO. Boa Sorte!<br />  [/quote]<br /> <br /> Ai que você se engana meu amigo. Logico que da sim para utilizar outro DAO, tanto Hibernate, JPA ou JDBC e eu fiz a mesma coisa que vc fez implementei um DAO usando JDBC e outro usando JPA, para testar a flexibilidade da aplicação caso eu mudasse de tecnologia. E funcionou perfeitamente e oolha que minha classe DAO tem diversos métodos. Eu não saio instânciando meus objeto diretamente em minha aplicação:<br /> <br /> [code]SimpleDAO dao = new HibernateDAO();[/code]<br /> <br /> Ao invés disso tenho uma classe Factory<br /> <br /> [code]SimpleDAO dao = DAOFactory.getDAO(AplicationContext.getContext());[/code]<br /> <br /> A classe [b]ApplicationContext[/b]  e a classe onde da inicio ao meu sistema startando as configurações principais. basta so eu alterar essa classe e pronto. Posso alterar para outro contexto de aplicação usando DAO, JPA ou JDBC.<br /> Basta apenas usar a classe SimpleDAO que é abstrata.<br /> [/quote]<br /> <br /> Blz. E como vc trabalha com transações?  acaso os seus DAOs abrem transações  ou vc tem algum outro objeto que controla isso ? <br /> E como vc substitui o uso de Open Session in View ?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/682050/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/682050/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Mon, 11 May 2009 08:14:33]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=sergiotaborda]<br /> Quem usa o Hibernate ou JPA nem deveria pensar em usar DAO. [/quote]<br /> <br /> Tenta mockar a API do Hibernate ou do JPA para você ver como é excelente a sua decisão arquitetural de não usar DAOs.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/682393/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/682393/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Mon, 11 May 2009 19:08:48]]> GMT</pubDate>
				<author><![CDATA[ Rubem Azenha]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=Rubem Azenha][quote=sergiotaborda]<br /> Quem usa o Hibernate ou JPA nem deveria pensar em usar DAO. [/quote]<br /> <br /> Tenta mockar a API do Hibernate ou do JPA para você ver como é excelente a sua decisão arquitetural de não usar DAOs.[/quote]<br /> <br /> ?<br /> <br /> Em uma arquitetura sã vc tem serviços que invocar métodos em repositorios.<br /> Os repositorios criam as pesquisas e as executam. Se vc usa o hibernate ou o JPA vc invoca-os directamente de dentro do repositorio. <br /> O repositorio não é plugável, não é flexivel, não é genérico e depende fortemente do dominio do sistema onde é usado. <br /> <br /> O DAO por outro lado é plugável, é flexivel, é genérico e não depende do dominio onde o sistema é usado. <br /> <br /> É muito simples não usar o DAO, sobretudo quando usa o Hibernate ou o JPA ( que são DomainStores). <br /> <br /> Agora vc pode argumentar que os "daos" que o povo usa por ai são na realdiade repositorios. Isso não é verdade. Não respeitam o mesmo padrão. <br /> É como dizer que um objeto apenas com métodos estáticos é um DAO só porque ele se chama xxxDAO. Ou que um factory é um singleton porque se chama "xxxxxSingleton". Isto é um argumento absurdo. <br /> A comparação têm que ser feita com base no padrão. O padrão DAO é um subtipo do Padrão Service. Existe a necessidade de ter um contrato separado da implementação. Isso faz sentido porque o DAO é flexivel e plugável. Para um Repositorio isso não faz qualquer sentido já que ele não é um serviço. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/683271/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/683271/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Wed, 13 May 2009 10:40:22]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=sergiotaborda]<br /> ?<br /> <br /> Em uma arquitetura sã vc tem serviços que invocar métodos em repositorios.<br /> Os repositorios criam as pesquisas e as executam. Se vc usa o hibernate ou o JPA vc invoca-os directamente de dentro do repositorio. <br /> O repositorio não é plugável, não é flexivel, não é genérico e depende fortemente do dominio do sistema onde é usado. <br />  [/quote]<br /> <br /> Eu utilizo Repositorio e a aplicação é extremamente flexível, fica independente do domínio e da persistência.<br /> A programação com repositorio, se bem utilizada, fica bem facil de ser compreendida, podendo permitir vc criar varios metodos de consulta e dar manutenção.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/695280/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/695280/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Fri, 5 Jun 2009 22:34:40]]> GMT</pubDate>
				<author><![CDATA[ leandronsp]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=leandronsp][quote=sergiotaborda]<br /> ?<br /> <br /> Em uma arquitetura sã vc tem serviços que invocar métodos em repositorios.<br /> Os repositorios criam as pesquisas e as executam. Se vc usa o hibernate ou o JPA vc invoca-os directamente de dentro do repositorio. <br /> O repositorio não é plugável, não é flexivel, não é genérico e depende fortemente do dominio do sistema onde é usado. <br />  [/quote]<br /> <br /> Eu utilizo Repositorio e a aplicação é extremamente flexível, fica independente do domínio e da persistência.<br /> [/quote]<br /> <br /> Ser independente do domínio e da persistência é impossível. Essa afirmação precisa de de um exemplo que  a comprove. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/705853/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/705853/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Tue, 30 Jun 2009 06:51:19]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=sergiotaborda][quote=leandronsp][quote=sergiotaborda]<br /> ?<br /> <br /> Em uma arquitetura sã vc tem serviços que invocar métodos em repositorios.<br /> Os repositorios criam as pesquisas e as executam. Se vc usa o hibernate ou o JPA vc invoca-os directamente de dentro do repositorio. <br /> O repositorio não é plugável, não é flexivel, não é genérico e depende fortemente do dominio do sistema onde é usado. <br />  [/quote]<br /> <br /> Eu utilizo Repositorio e a aplicação é extremamente flexível, fica independente do domínio e da persistência.<br /> [/quote]<br /> <br /> Ser independente do domínio e da persistência é impossível. Essa afirmação precisa de de um exemplo que  a comprove. [/quote]<br /> <br /> Eu tbm.... nunca vi esta façanha... ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/705877/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/705877/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Tue, 30 Jun 2009 07:29:29]]> GMT</pubDate>
				<author><![CDATA[ luistiagos]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=sergiotaborda][quote=leandronsp][quote=sergiotaborda]<br /> ?<br /> <br /> Em uma arquitetura sã vc tem serviços que invocar métodos em repositorios.<br /> Os repositorios criam as pesquisas e as executam. Se vc usa o hibernate ou o JPA vc invoca-os directamente de dentro do repositorio. <br /> O repositorio não é plugável, não é flexivel, não é genérico e depende fortemente do dominio do sistema onde é usado. <br />  [/quote]<br /> <br /> Eu utilizo Repositorio e a aplicação é extremamente flexível, fica independente do domínio e da persistência.<br /> [/quote]<br /> <br /> Ser independente do domínio e da persistência é impossível. Essa afirmação precisa de de um exemplo que  a comprove. [/quote]<br /> <br /> Além de ser impossível, oq vc ganha(ria) com tanta flexibilidade?<br /> Não vejo utilidade de se criar o sistema mais independente do mundo, tão independente que ele nem precisa saber o domínio dele. Basta vc pensar no seu problema perto dele, e ele resolve =/]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/705913/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/705913/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Tue, 30 Jun 2009 08:33:24]]> GMT</pubDate>
				<author><![CDATA[ clone_zealot]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ Desculpem, creio que me equivoquei em dizer que o repository fica independente do dominio. Ele faz parte do dominio. Qdo desenvolvo o dominio, eu tbm crio os repositorios.<br /> Mas ainda entendo que ele é independente da persistencia. Vou tentar demonstrar:<br /> <br /> [code]<br /> public interface RepositorioInterface&lt;T&gt; () {<br />    public void adicionar(T objeto);<br />    public void remover(T objeto);<br />    public List&lt;T&gt; listarTodos();<br /> }<br /> [/code]<br /> <br /> Um factory Interface para definir os repositorios mais especificos:<br /> <br /> [code]<br /> public interface RepositorioFactoryInterface {<br />    public void beginTransaction();<br />     public void commit();<br />     public void flushAndClear();    <br />     public void rollback();<br />     public void close();<br />    public ArquivoRepositorioInterface getArquivoRepositorio(); // aqui é definido o método para retornar um ArquivoRepositorio<br /> }<br /> [/code]<br /> <br /> Um repositorio interface mais especifico, que extende o RepositorioInterface:<br /> <br /> [code]<br /> public interface ArquivoRepositorioInterface extends RepositorioInterface&lt;Arquivo&gt; {<br />    public List&lt;Arquivo&gt; getArquivosDestaque();<br /> }<br /> [/code]<br /> <br /> Até agora, minhas interfaces de repositorio foram independentes da persistencia.<br /> A partir de agora, a implementação do Dao (infra-estrutura para persistência):<br /> <br /> [code]<br /> public class ArquivoRepositorioDao extends Dao&lt;Arquivo&gt; implements	ArquivoRepositorioInterface {<br />    public ArquivoRepositorioDao(EntityManager em, RepositorioFactoryInterface factory) {<br /> 		super(em, Arquivo.class, factory);<br />    }<br /> <br />    public List&lt;Arquivo&gt; getArquivosDestaque() {<br /> 		// queries para retornar o desejado<br />    }<br /> [/code]<br /> <br /> Neste caso estou utilizando a persistencia com JPA. Meu DaoFactory é implementado da seguinte forma:<br /> [code]<br /> public class DaoFactory implements RepositorioFactoryInterface {<br />    protected final EntityManager em;<br />    private EntityTransaction transaction;<br /> <br />    public DaoFactory() {<br />         em = JPAUtil.getEntityManager();<br />     }<br /> <br />     public void beginTransaction() {<br />         this.transaction = em.getTransaction();<br />         this.transaction.begin();<br />     }<br /> <br />     // demais metodos a serem implementados da interface<br /> }<br /> [/code]<br /> <br /> Na aplicação o objeto do tipo RepositorioFactoryInterface faz os trabalhos de persistência:<br /> <br /> [code]<br /> RepositorioFactoryInterface factory = new DaoFactory();<br /> List&lt;Arquivo&gt; arquivos = factory.getArquivoRepositorio().getArquivosDestaque();<br /> [/code]<br /> <br /> Não sei se ficou claro, mas eu entendo que mesmo que eu altere minha forma de persistência (no caso, trocar o JPA por qq outra coisa), não afeta as lógicas de persistência no repositório (eu só alteraria meu Dao). ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/705928/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/705928/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Tue, 30 Jun 2009 08:58:11]]> GMT</pubDate>
				<author><![CDATA[ leandronsp]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ Estava indo bem até que ... <br /> <br /> [quote=leandronsp]<br /> Até agora, minhas interfaces de repositorio foram independentes da persistencia.<br /> A partir de agora, a implementação do Dao (infra-estrutura para persistência):<br /> <br /> [code]<br /> public class ArquivoRepositorioDao extends Dao&lt;Arquivo&gt; implements	ArquivoRepositorioInterface {<br />    <br /> [/code]<br /> [/quote]<br /> Outch! Se eu tivesse um centavo por cada vez que alguem confundo repositorio com DAO, estaria rico.<br /> <br /> Veja bem o problema. O repositorio não é um DAO, nem o DAO é um repositorio. Logo, herança ou implementação de um pelo outro é asneira.<br /> <br /> Este erro é muito comum pela mesma razão que é muito comuma alguem fazer este erro aqui:<br /> <br /> [code]<br /> public class Pedido extends HashMap&lt;Integer, ItemPedido&gt; <br /> [/code]<br /> <br /> ou <br /> <br /> [code]<br /> public class Produtos extends ArrayList&lt;Produto&gt;<br /> [/code]<br /> <br /> As pessoas ainda não sabem o que é herança. A regra é simples: perfira composição a herança. Apenas e quando A é B é que a herança pode ser usada. (Herança aqui inclui o implements e o extends)<br /> <br /> Ora da mesma forma que um Pedido não é um HashMap e sim Pedido contém um Map, também Repositorio não é um DAO, Repositorio contém um DAO. <br /> <br /> Inverter as coisas é ainda pior. Fazer DAO extends Repositorio é do mesmo calibre que fazer HashMap extends Pedido.  Pedido é do dominio, Map é de infra. infra não pode extender o dominio. O dominio não pode extender a infra. O que pode acontecer é que o dominio use a infra. Daqui a composição ao invés da herança.<br /> <br /> Pior ainda é escrever um DAO usando JPA por baixo.... JPA é orientado ao dominio. DAOs não são. Você não precisa usar a camada de DAO se usa JPA. <br /> <br /> Por amor de Deus, pessoal, estudem a arquitetura JPA e o padrão Domain Store. É triste vos ver cometendo o mesmo erro vezes sem conta... <br /> <br /> A partir do ponto que vc misturou tudo não só você não sabe no "mato sem cachorro" em que se está metendo como você ainda sofre do sindrome de DAO. Pelo menos vc ainda vislumbra uma diferença entre DAO e Repositório. Isso já é um bom sinal para um cura possivel.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/706563/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/706563/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Wed, 1 Jul 2009 07:25:39]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=leandronsp][quote=sergiotaborda]<br /> ?<br /> <br /> Em uma arquitetura sã vc tem serviços que invocar métodos em repositorios.<br /> Os repositorios criam as pesquisas e as executam. Se vc usa o hibernate ou o JPA vc invoca-os directamente de dentro do repositorio. <br /> O repositorio não é plugável, não é flexivel, não é genérico e depende fortemente do dominio do sistema onde é usado. <br />  [/quote]<br /> <br /> Eu utilizo Repositorio e a aplicação é extremamente flexível, fica independente do domínio e da persistência.<br /> A programação com repositorio, se bem utilizada, fica bem facil de ser compreendida, podendo permitir vc criar varios metodos de consulta e dar manutenção.[/quote]<br /> <br /> Eu utilizo Interfaces e a aplicação é extremamente flexível, fica independente do domínio e da persistência.<br /> A programação com Interfaces, se bem utilizada, fica bem facil de ser compreendida, podendo permitir vc criar varios metodos de consulta e dar manutenção.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/706627/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/706627/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Wed, 1 Jul 2009 08:21:34]]> GMT</pubDate>
				<author><![CDATA[ mochuara]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=leandronsp]Desculpem, creio que me equivoquei em dizer que o repository fica independente do dominio. Ele faz parte do dominio. Qdo desenvolvo o dominio, eu tbm crio os repositorios.<br /> Mas ainda entendo que ele é independente da persistencia. Vou tentar demonstrar:<br /> <br /> [code]<br /> public interface RepositorioInterface&lt;T&gt; () {<br />    public void adicionar(T objeto);<br />    public void remover(T objeto);<br />    public List&lt;T&gt; listarTodos();<br /> }<br /> [/code]<br /> <br /> Um factory Interface para definir os repositorios mais especificos:<br /> <br /> [code]<br /> public interface RepositorioFactoryInterface {<br />    public void beginTransaction();<br />     public void commit();<br />     public void flushAndClear();    <br />     public void rollback();<br />     public void close();<br />    public ArquivoRepositorioInterface getArquivoRepositorio(); // aqui é definido o método para retornar um ArquivoRepositorio<br /> }<br /> [/code]<br /> <br /> Um repositorio interface mais especifico, que extende o RepositorioInterface:<br /> <br /> [code]<br /> public interface ArquivoRepositorioInterface extends RepositorioInterface&lt;Arquivo&gt; {<br />    public List&lt;Arquivo&gt; getArquivosDestaque();<br /> }<br /> [/code]<br /> <br /> Até agora, minhas interfaces de repositorio foram independentes da persistencia.<br /> A partir de agora, a implementação do Dao (infra-estrutura para persistência):<br /> <br /> [code]<br /> public class ArquivoRepositorioDao extends Dao&lt;Arquivo&gt; implements	ArquivoRepositorioInterface {<br />    public ArquivoRepositorioDao(EntityManager em, RepositorioFactoryInterface factory) {<br /> 		super(em, Arquivo.class, factory);<br />    }<br /> <br />    public List&lt;Arquivo&gt; getArquivosDestaque() {<br /> 		// queries para retornar o desejado<br />    }<br /> [/code]<br /> <br /> Neste caso estou utilizando a persistencia com JPA. Meu DaoFactory é implementado da seguinte forma:<br /> [code]<br /> public class DaoFactory implements RepositorioFactoryInterface {<br />    protected final EntityManager em;<br />    private EntityTransaction transaction;<br /> <br />    public DaoFactory() {<br />         em = JPAUtil.getEntityManager();<br />     }<br /> <br />     public void beginTransaction() {<br />         this.transaction = em.getTransaction();<br />         this.transaction.begin();<br />     }<br /> <br />     // demais metodos a serem implementados da interface<br /> }<br /> [/code]<br /> <br /> Na aplicação o objeto do tipo RepositorioFactoryInterface faz os trabalhos de persistência:<br /> <br /> [code]<br /> RepositorioFactoryInterface factory = new DaoFactory();<br /> List&lt;Arquivo&gt; arquivos = factory.getArquivoRepositorio().getArquivosDestaque();<br /> [/code]<br /> <br /> Não sei se ficou claro, mas eu entendo que mesmo que eu altere minha forma de persistência (no caso, trocar o JPA por qq outra coisa), não afeta as lógicas de persistência no repositório (eu só alteraria meu Dao). [/quote]<br /> <br /> O uso de interfaces no DAO é a forma como o padrão foi projetado originalmente. O que as interfaces com prefixo Repositório que você utilizou têm de especial que a fazem levar o nome pomposo de Padrão Repositório?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/706632/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/706632/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Wed, 1 Jul 2009 08:27:50]]> GMT</pubDate>
				<author><![CDATA[ mochuara]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ Sérgio,<br /> <br /> Obrigado pelas críticas. Todas são mto bem-vindas.<br /> A idéia do DAO nesta aplicação é justamente ele fazer os CRUDS. E o DAOFactory iniciar transações do JPA, comitar, etc.<br /> <br /> Obviamente, nota-se na classe DAO os métodos que fazem os trabalhos de persistência utilizarem o EntityManager. Ficou uma coisa meio óbvia, e cheguei a pensar: "pra quê ter DAO, se tudo isso parece feijão com arroz 'duas vezes'?".<br /> <br /> Entendi oq vc quis dizer, e pesquisando melhor em foruns, no seu blog inclusive, em links recomendados, percebi que o EntityManager do JPA e o Session do Hibernate poderiam ser  os "DAO´s" da aplicação (certo?). No meu caso, como utilizo o Repository, eu injetaria o EntityManager nas minhas classes de negócio do Repository? Algo como:<br /> <br /> [code]<br /> class RepositorioCRUD () {<br />    private EntityManager em;<br /> <br />    // construtor que recebe o EntityManager<br />    public RepositorioCRUD () {<br />       em = JPAUtil.getManager();<br />    }<br /> <br />    public void adicionar (Object o) {<br />       this.em.persist(o);<br />    }<br /> <br />    // outros metodos de persistencia omitidos e getters<br /> }<br /> [/code]<br /> <br /> Se for dessa forma, não fica parecendo um DAO, só que com outro nome?<br /> Obrigado.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/706640/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/706640/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Wed, 1 Jul 2009 08:39:00]]> GMT</pubDate>
				<author><![CDATA[ leandronsp]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [b]leandronsp[/b]<br /> <br /> Dá uma lida neste link [url]http://debasishg.blogspot.com/2007/02/domain-driven-design-inject.html[/url], nele tem esta definição data pelo autor que pode lhe ajudar.<br /> <br /> [quote=Debasish Ghosh]<br /> The main differences between the Repository and the DAO are that :<br /> <br /> <br />     * The DAO is at a lower level of abstraction than the Repository and can contain plumbing codes to pull out data from the database. We have one DAO per database table, but one repository per domain type or aggregate.<br /> <br />     * The contracts provided by the Repository are purely "domain centric" and speak the same domain language.[/quote]<br /> <br /> Não deixe de ler o post do cara (Debasish Ghosh) acho que irá melhora um pouco mais o seu entendimento além de dar outras idéias.<br /> <br /> flws<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/706755/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/706755/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Wed, 1 Jul 2009 11:01:11]]> GMT</pubDate>
				<author><![CDATA[ fantomas]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=leandronsp]<br /> Entendi oq vc quis dizer, e pesquisando melhor em foruns, no seu blog inclusive, em links recomendados, percebi que o EntityManager do JPA e o Session do Hibernate poderiam ser  os "DAO´s" da aplicação (certo?). <br /> [/quote]<br /> <br /> Certo!<br /> Só lembrando que realmente o EntityManager é uma implementação do padrão DomainStore.<br /> O Session do Hibernate é uma implementação do padrão UnitOfWork<br /> <br /> [quote]<br /> No meu caso, como utilizo o Repository, eu injetaria o EntityManager nas minhas classes de negócio do Repository? <br /> [/quote]<br /> <br /> Sim. Exactamente.<br /> <br /> [quote]<br /> Se for dessa forma, não fica parecendo um DAO, só que com outro nome?<br /> [/quote]<br /> <br /> Não. Isso é um erro comum. Se X e Y parecem ter a mesma interface então X é Y. não!<br /> Para X ser Y ele precisa ter não apenas a mesma interface como a mesma responsabilidade.<br /> <br /> DAOs e Repositorios têm responsabilidades diferentes , portanto é impossivel confundi-los.<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/706819/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/706819/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Wed, 1 Jul 2009 12:39:21]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=fantomas][b]leandronsp[/b]<br /> <br /> Dá uma lida neste link [url]http://debasishg.blogspot.com/2007/02/domain-driven-design-inject.html[/url], nele tem esta definição data pelo autor que pode lhe ajudar.<br /> <br /> [quote=Debasish Ghosh]<br /> The main differences between the Repository and the DAO are that :<br /> <br /> <br />     * The DAO is at a lower level of abstraction than the Repository and can contain plumbing codes to pull out data from the database. We have one DAO per database table, but one repository per domain type or aggregate.<br /> <br />     * The contracts provided by the Repository are purely "domain centric" and speak the same domain language.[/quote]<br /> <br /> Não deixe de ler o post do cara (Debasish Ghosh) acho que irá melhora um pouco mais o seu entendimento além de dar outras idéias.<br /> <br /> flws<br /> [/quote]<br /> <br /> valeu fantomas...vou trabalhar mais essas técnicas ensinadas]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/706849/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/706849/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Wed, 1 Jul 2009 13:15:39]]> GMT</pubDate>
				<author><![CDATA[ leandronsp]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ hum... parece que ficou mais clara essa divisão de responsabilidades. Creio que esta aplicação não foge mto doq vcs estão colocando, porém com algumas ressalvas, tais como utilizar mais composição (ao invés de herança) e fazer meu domínio enxergar a interface do repositorio apenas, e não um "dao". Realmente pra essas coisas eu não tinha me atentando mto. Vou estudar mais o material do Evans - DDD.<br /> <br /> O lance aqui então é: a interface do meu repositorio deve ser como um "contrato", numa linguagem fácil para fazer parte do domínio.<br /> A implementação do meu repositorio "contém" a infra-estrutura para persistência, neste caso o JPA.<br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/706862/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/706862/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Wed, 1 Jul 2009 13:27:49]]> GMT</pubDate>
				<author><![CDATA[ leandronsp]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [img]http://java.sun.com/blueprints/corej2eepatterns/Patterns/images09/figure09_07.jpg[/img]<br /> <br /> <br /> Criar repositorio para DAOs é criar abstrações em cima de abstrações, totalmente desnecessário IMO.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/706897/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/706897/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Wed, 1 Jul 2009 14:17:53]]> GMT</pubDate>
				<author><![CDATA[ mochuara]]></author>
			</item>
			<item>
				<title>Re:Duvidas sobre o pattern DAO!</title>
				<description><![CDATA[ [quote=mochuara]<br /> Criar repositorio para DAOs é criar abstrações em cima de abstrações, totalmente desnecessário IMO.[/quote]<br /> <br /> Isso seria verdade ser existisse uma relação 1-1. Como a relação é 1-N então isso não se aplica.<br /> <br /> Uma entidade X tem um repositorio. Mas X é um agregado de Y, Z , ... etc.. logo o repositorio de X utiliza o DAO de Y, Z, etc... <br /> <br /> A aplicação vê apenas um repositorio e o X. Mas por baixo dos panos muitas entidades estão implicitas e muitos DAOs.<br /> Contudo, hoje em dia o DAO é desnecessário. Utilizando qualquer domain Store voce tem uma relação N-1. Vários repositorios chamam o mesmo DomainStore (porque ele não é por entidade e sim por dominio).<br /> <br /> Veja-se como se vir, devido a que nunca existe uma relação 1-1 entre repositorios e DAOs / DomainStore , a abstração não é desnecessária.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/126103/707590/reduvidas-sobre-o-pattern-dao
</guid>
				<link>http://www.guj.com.br/prepost/126103/707590/reduvidas-sobre-o-pattern-dao
</link>
				<pubDate><![CDATA[Thu, 2 Jul 2009 16:33:51]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
	</channel>
</rss>
