<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: No more DAO&#8217;s</title>
	<atom:link href="http://www.rponte.com.br/2009/06/08/no-more-daos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rponte.com.br/2009/06/08/no-more-daos/</link>
	<description>"TEAM = Together Everyone Achieves More"</description>
	<pubDate>Mon, 15 Mar 2010 04:06:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
		<item>
		<title>By: Victor</title>
		<link>http://www.rponte.com.br/2009/06/08/no-more-daos/#comment-668</link>
		<dc:creator>Victor</dc:creator>
		<pubDate>Sun, 23 Aug 2009 22:41:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.rponte.com.br/?p=223#comment-668</guid>
		<description>Acho que o mais interessante de se usar:

xhtml -&#62; jsfBean -&#62; VendasEJBRepositoryManagerBusinessXuxaFezPorno(sei lá o que vc chama o cara que tem a logica de negócio) -&#62; DAO -&#62; JPA -&#62; DataBase

é que o seu VendasEJBRepositoryManagerBusinessXuxaFezPorno consegue manipular as relaçoes entre as entities e as mudanças nos comportamentos dos objetos 'quase' como se estivessemos brincando num metodo main estupido.

ex:

@Stateless
class VendasEJBRepositoryManagerBusinessXuxaFezPornoBean implements VendasEJBRepositoryManagerBusinessXuxaFezPorno {

@EJB
VendasDAO vendasDao;

void finalizar(Venda venda){

  venda = vendaDAO.get(venda.id);// eu nao quero saber como alguem busca uma venda no database!
  produtos = venda.getProdutos();//lazy load ( isso é o 'quase' do inicio do comentario

    for (Produto p : produtos){
      if (!disponivel()) throw DeuPauNaVendaExcpetion("pau");  
    }

     // e por ai continua
}


boolean disponivel(Prdito p){ return blablabla}
}

eu prefiro chamar myDAO.findAlgumaCoisaNessesCriterios(); a partir do meu Repositorio do que colocar a maneira como essa alguma coisa eh achada diretamente no meu Repositorio.

Os meus Repositorios sao Homens de Negocio que nao se preocupam em como as coisas sao achadas, salvas, deletadas.

Eles simplesmente decidem QUAIS e COMO as coisas vao ser feitas. 
Por isso eu ainda continuo com DAOs.

Obrigado</description>
		<content:encoded><![CDATA[<p>Acho que o mais interessante de se usar:</p>
<p>xhtml -&gt; jsfBean -&gt; VendasEJBRepositoryManagerBusinessXuxaFezPorno(sei lá o que vc chama o cara que tem a logica de negócio) -&gt; DAO -&gt; JPA -&gt; DataBase</p>
<p>é que o seu VendasEJBRepositoryManagerBusinessXuxaFezPorno consegue manipular as relaçoes entre as entities e as mudanças nos comportamentos dos objetos &#8216;quase&#8217; como se estivessemos brincando num metodo main estupido.</p>
<p>ex:</p>
<p>@Stateless<br />
class VendasEJBRepositoryManagerBusinessXuxaFezPornoBean implements VendasEJBRepositoryManagerBusinessXuxaFezPorno {</p>
<p>@EJB<br />
VendasDAO vendasDao;</p>
<p>void finalizar(Venda venda){</p>
<p>  venda = vendaDAO.get(venda.id);// eu nao quero saber como alguem busca uma venda no database!<br />
  produtos = venda.getProdutos();//lazy load ( isso é o &#8216;quase&#8217; do inicio do comentario</p>
<p>    for (Produto p : produtos){<br />
      if (!disponivel()) throw DeuPauNaVendaExcpetion(&#8221;pau&#8221;);<br />
    }</p>
<p>     // e por ai continua<br />
}</p>
<p>boolean disponivel(Prdito p){ return blablabla}<br />
}</p>
<p>eu prefiro chamar myDAO.findAlgumaCoisaNessesCriterios(); a partir do meu Repositorio do que colocar a maneira como essa alguma coisa eh achada diretamente no meu Repositorio.</p>
<p>Os meus Repositorios sao Homens de Negocio que nao se preocupam em como as coisas sao achadas, salvas, deletadas.</p>
<p>Eles simplesmente decidem QUAIS e COMO as coisas vao ser feitas.<br />
Por isso eu ainda continuo com DAOs.</p>
<p>Obrigado</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Wanderson Santos</title>
		<link>http://www.rponte.com.br/2009/06/08/no-more-daos/#comment-661</link>
		<dc:creator>Wanderson Santos</dc:creator>
		<pubDate>Thu, 13 Aug 2009 20:17:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.rponte.com.br/?p=223#comment-661</guid>
		<description>A frase cinza citada é o velho problema da "bola de cristal" do papel do arquiteto - aquele que define o alicerce do sistema.

O arquiteto deve definir o que é palpável ou fortemente provável e não algo altamente improvável. Caso contrário "criamos Robocops que acabam ajudando velhinhas a atravessar a rua". 

Quantos sistemas que utilizam Hibernate/DAO que precisaram ser trocados por TopLink ou iBatis ou JDBC puro? É provável que não apareça nenhum. ;-)

Dito isso, ainda, vejo que JPA 1.0 não é uma especificação madura o suficiente para ser utilizada diretamente no código, como já é o Hibernate. Duas questões me vem rapidamente: não possuir definição para delete-orphan, bem como não tem API para Criteria.

O que tenho visto são sistemas de utilizando Hibernate/Session com DAO e utilizando anotações JPA para mapeamento. Ou seja, se preparando pro futuro padrão de mercado sem perder as funcionalidades presentes.

Com JPA 2.0 será diferente, pois ela atende a maior parte das funcionalidades ORM. Então acredito que o padrão DAO caia em desuso.

Ah, com relação às queries de consulta espalhadas? Basta anota-las na entidade via @NamedQuery e voilá! Tchau DAO!</description>
		<content:encoded><![CDATA[<p>A frase cinza citada é o velho problema da &#8220;bola de cristal&#8221; do papel do arquiteto - aquele que define o alicerce do sistema.</p>
<p>O arquiteto deve definir o que é palpável ou fortemente provável e não algo altamente improvável. Caso contrário &#8220;criamos Robocops que acabam ajudando velhinhas a atravessar a rua&#8221;. </p>
<p>Quantos sistemas que utilizam Hibernate/DAO que precisaram ser trocados por TopLink ou iBatis ou JDBC puro? É provável que não apareça nenhum. <img src='http://www.rponte.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Dito isso, ainda, vejo que JPA 1.0 não é uma especificação madura o suficiente para ser utilizada diretamente no código, como já é o Hibernate. Duas questões me vem rapidamente: não possuir definição para delete-orphan, bem como não tem API para Criteria.</p>
<p>O que tenho visto são sistemas de utilizando Hibernate/Session com DAO e utilizando anotações JPA para mapeamento. Ou seja, se preparando pro futuro padrão de mercado sem perder as funcionalidades presentes.</p>
<p>Com JPA 2.0 será diferente, pois ela atende a maior parte das funcionalidades ORM. Então acredito que o padrão DAO caia em desuso.</p>
<p>Ah, com relação às queries de consulta espalhadas? Basta anota-las na entidade via @NamedQuery e voilá! Tchau DAO!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rômulo Augusto</title>
		<link>http://www.rponte.com.br/2009/06/08/no-more-daos/#comment-656</link>
		<dc:creator>Rômulo Augusto</dc:creator>
		<pubDate>Fri, 24 Jul 2009 17:57:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.rponte.com.br/?p=223#comment-656</guid>
		<description>Engraçado, porque uso Spring e eu gosto muito do "tal do" HibernateTemplate. 

O bom é que ele encapsula a complexidade de controle da sessão (exemplo simples).

Mas se eu não usasse Spring certamente gostaria de encapsular esse tipo de coisa. Vamos dizer que não desse o nome de DAO.

Imaginando um EntityManager injetado em 2 Controllers, por exemplo, e nessas 2 classes eu precisasse da mesma consulta. Acho que devo isolar isso em algum lugar!

Não concordo sair chamando tudo de DAO, a menos que realmente seja um DAO. Mas concordo em encapsular coisas pra poder reusá-las e me dá menos trabalho</description>
		<content:encoded><![CDATA[<p>Engraçado, porque uso Spring e eu gosto muito do &#8220;tal do&#8221; HibernateTemplate. </p>
<p>O bom é que ele encapsula a complexidade de controle da sessão (exemplo simples).</p>
<p>Mas se eu não usasse Spring certamente gostaria de encapsular esse tipo de coisa. Vamos dizer que não desse o nome de DAO.</p>
<p>Imaginando um EntityManager injetado em 2 Controllers, por exemplo, e nessas 2 classes eu precisasse da mesma consulta. Acho que devo isolar isso em algum lugar!</p>
<p>Não concordo sair chamando tudo de DAO, a menos que realmente seja um DAO. Mas concordo em encapsular coisas pra poder reusá-las e me dá menos trabalho</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rael</title>
		<link>http://www.rponte.com.br/2009/06/08/no-more-daos/#comment-645</link>
		<dc:creator>Rael</dc:creator>
		<pubDate>Sat, 11 Jul 2009 16:07:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.rponte.com.br/?p=223#comment-645</guid>
		<description>Se há muito de HQLs, pq não criar um método dentro da própria classe que vai fazer a busca? Por exemplo, por que não um método Funcionario.listDesempregados (Funcionario é um Entity) que use esse HQL?

O mais engraçado do povo que cria DAO de modo automático, é a repetição dos métodos. Criam um save no Entity, que chama o save do DAO, que chama o save do EntityManager. Ridículo. Isso quando basta chamar o save do EntityManager, que ao contrário do que disseram acima, JPA é sim uma abstração do modelo objeto relacional.

Acho que às vezes falta pras pessoas aprenderem um pouco com outras linguagens, como Ruby. Eu adoro Java, mas mexer com outras linguagens sempre abre a mente para soluções diferentes.</description>
		<content:encoded><![CDATA[<p>Se há muito de HQLs, pq não criar um método dentro da própria classe que vai fazer a busca? Por exemplo, por que não um método Funcionario.listDesempregados (Funcionario é um Entity) que use esse HQL?</p>
<p>O mais engraçado do povo que cria DAO de modo automático, é a repetição dos métodos. Criam um save no Entity, que chama o save do DAO, que chama o save do EntityManager. Ridículo. Isso quando basta chamar o save do EntityManager, que ao contrário do que disseram acima, JPA é sim uma abstração do modelo objeto relacional.</p>
<p>Acho que às vezes falta pras pessoas aprenderem um pouco com outras linguagens, como Ruby. Eu adoro Java, mas mexer com outras linguagens sempre abre a mente para soluções diferentes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mateus</title>
		<link>http://www.rponte.com.br/2009/06/08/no-more-daos/#comment-640</link>
		<dc:creator>Mateus</dc:creator>
		<pubDate>Tue, 30 Jun 2009 23:09:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.rponte.com.br/?p=223#comment-640</guid>
		<description>Concordo com o CMilfont, para CRUD não faz muito sentido, porém o uso de classes que encapsulem um EntityManager facilitam no reuso de HQLs que sejam muito executadas pelo código.</description>
		<content:encoded><![CDATA[<p>Concordo com o CMilfont, para CRUD não faz muito sentido, porém o uso de classes que encapsulem um EntityManager facilitam no reuso de HQLs que sejam muito executadas pelo código.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gustavo</title>
		<link>http://www.rponte.com.br/2009/06/08/no-more-daos/#comment-625</link>
		<dc:creator>Gustavo</dc:creator>
		<pubDate>Fri, 19 Jun 2009 17:13:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.rponte.com.br/?p=223#comment-625</guid>
		<description>Legal o post Rafael.

  Mas só para refletir, e indo na mesma direção dos comentários do George Queiroz e Eldon: e quanto a Forte Coesão e Baixo Acoplamento? Não levando em consideração que DAO e Repository abstraem a implementação do ORM, se elas apenas abstraíssem para o Controller a camada de dados já estaria fazendo seu papel, não acha? Em equipes e projetos bem estruturados e divididos, colocar uma equipe para trabalhar com os Controllers e outra com a camada de dados, usar o DAO ou Repository já seria uma mão na roda. Mesmo em equipes pequenas, onde talvez não haja uma divisão clara das partes do projeto, no mínimo seria mais clara a divisão entre controle e dados e facilitaria a manutenção.
Concordo com você que precisamos sempre avaliar os problemas e usar os padrões que melhor os resolvam. Mas a ideia desse post de que usando JPA elimina a necessidade de camadas de dados é, no mínimo, arriscada.
Meus 2 centavos.</description>
		<content:encoded><![CDATA[<p>Legal o post Rafael.</p>
<p>  Mas só para refletir, e indo na mesma direção dos comentários do George Queiroz e Eldon: e quanto a Forte Coesão e Baixo Acoplamento? Não levando em consideração que DAO e Repository abstraem a implementação do ORM, se elas apenas abstraíssem para o Controller a camada de dados já estaria fazendo seu papel, não acha? Em equipes e projetos bem estruturados e divididos, colocar uma equipe para trabalhar com os Controllers e outra com a camada de dados, usar o DAO ou Repository já seria uma mão na roda. Mesmo em equipes pequenas, onde talvez não haja uma divisão clara das partes do projeto, no mínimo seria mais clara a divisão entre controle e dados e facilitaria a manutenção.<br />
Concordo com você que precisamos sempre avaliar os problemas e usar os padrões que melhor os resolvam. Mas a ideia desse post de que usando JPA elimina a necessidade de camadas de dados é, no mínimo, arriscada.<br />
Meus 2 centavos.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: George Queiroz</title>
		<link>http://www.rponte.com.br/2009/06/08/no-more-daos/#comment-621</link>
		<dc:creator>George Queiroz</dc:creator>
		<pubDate>Tue, 16 Jun 2009 18:34:04 +0000</pubDate>
		<guid isPermaLink="false">http://www.rponte.com.br/?p=223#comment-621</guid>
		<description>Pelo visto o nome DAO levando o crédito sobre tudo que se manipula dados, ex: DAO ou Repository???

Assim sendo, eu prefiro manipular dados como uma camada separada ou como um Helper do Service. Não acho interessante incluir nos services as necessidades de manipulação de dados, digamos sobre manipulação, principalmente buscas, que envolvem *QL.

Mais sou o adepto do ActiveRecord, infelizmente no java direto não dá, mais nada melhor que esta no mundo do GORM ou algo do tipo.

[s]</description>
		<content:encoded><![CDATA[<p>Pelo visto o nome DAO levando o crédito sobre tudo que se manipula dados, ex: DAO ou Repository???</p>
<p>Assim sendo, eu prefiro manipular dados como uma camada separada ou como um Helper do Service. Não acho interessante incluir nos services as necessidades de manipulação de dados, digamos sobre manipulação, principalmente buscas, que envolvem *QL.</p>
<p>Mais sou o adepto do ActiveRecord, infelizmente no java direto não dá, mais nada melhor que esta no mundo do GORM ou algo do tipo.</p>
<p>[s]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Fabio Massa</title>
		<link>http://www.rponte.com.br/2009/06/08/no-more-daos/#comment-620</link>
		<dc:creator>Fabio Massa</dc:creator>
		<pubDate>Tue, 16 Jun 2009 17:10:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.rponte.com.br/?p=223#comment-620</guid>
		<description>Ótimo post Rafael, confesso que ultimamente tenho dúvidas na hora de implementar e com certeza posts como esse ajudam demais.
abraços,</description>
		<content:encoded><![CDATA[<p>Ótimo post Rafael, confesso que ultimamente tenho dúvidas na hora de implementar e com certeza posts como esse ajudam demais.<br />
abraços,</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Eldon</title>
		<link>http://www.rponte.com.br/2009/06/08/no-more-daos/#comment-617</link>
		<dc:creator>Eldon</dc:creator>
		<pubDate>Thu, 11 Jun 2009 20:54:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.rponte.com.br/?p=223#comment-617</guid>
		<description>IMHO, acho que a utilização da API do mecanismo de mapeamento objeto relacional (ex: Hibernate / JPA) deve ficar na implementação de um repositório. Quando falo de repositório, estou me referindo ao conceito dentro do escopo da DDD (Domain Driven Design). A camada de negócio e aplicação usam a interface do repositório. 

Para mais informações:

http://domaindrivendesign.org/

Livro: Domain-Driven Design: Tackling Complexity in the Heart of Software (Hardcover) - Eric Evans</description>
		<content:encoded><![CDATA[<p>IMHO, acho que a utilização da API do mecanismo de mapeamento objeto relacional (ex: Hibernate / JPA) deve ficar na implementação de um repositório. Quando falo de repositório, estou me referindo ao conceito dentro do escopo da DDD (Domain Driven Design). A camada de negócio e aplicação usam a interface do repositório. </p>
<p>Para mais informações:</p>
<p><a href="http://domaindrivendesign.org/" rel="nofollow">http://domaindrivendesign.org/</a></p>
<p>Livro: Domain-Driven Design: Tackling Complexity in the Heart of Software (Hardcover) - Eric Evans</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: JamesD</title>
		<link>http://www.rponte.com.br/2009/06/08/no-more-daos/#comment-616</link>
		<dc:creator>JamesD</dc:creator>
		<pubDate>Thu, 11 Jun 2009 16:40:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.rponte.com.br/?p=223#comment-616</guid>
		<description>Thanks for the useful info. It's so interesting</description>
		<content:encoded><![CDATA[<p>Thanks for the useful info. It&#8217;s so interesting</p>
]]></content:encoded>
	</item>
</channel>
</rss>
