<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.0.10" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comentários em: Repositórios: pra que te quero?</title>
	<link>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/</link>
	<description>O blog da ASPERCOM Treinamentos   www.aspercom.com.br</description>
	<pubDate>Fri, 30 Jul 2010 22:02:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.10</generator>

	<item>
		<title>por: Everyday Tales: Anatomy of a Refactoring at Fragmental.tw</title>
		<link>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-9779</link>
		<pubDate>Wed, 24 Feb 2010 12:55:38 +0000</pubDate>
		<guid>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-9779</guid>
					<description>[...] So we decided to follow the suggestion of Rodrigo Yoshima (link in Portuguese) and drop the *Repository suffix. If they should behave like in-memory lists let’s give them a decent name! So here we are: [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] So we decided to follow the suggestion of Rodrigo Yoshima (link in Portuguese) and drop the *Repository suffix. If they should behave like in-memory lists let’s give them a decent name! So here we are: [&#8230;]
</p>
]]></content:encoded>
				</item>
	<item>
		<title>por: Eldon</title>
		<link>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7314</link>
		<pubDate>Wed, 30 Sep 2009 13:54:45 +0000</pubDate>
		<guid>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7314</guid>
					<description>Rodrigo Yoshima,

A respeito do repositório PedidosFaturados, lhe pergunto, qual a sua agregação neste caso, sim porque o Evans deixa claro que os repositórios devem ser descritos para uma agregação,  Perceba que pedidos faturados é uma característica do pedido, o conceito de negócio é o pedido e provavelmente deve ser a sua raiz de agregação. Imagine em um sistema grande, criar repositórios para cada carecterística forte de um conceito, imagine, por exemplo, no domínio de negócio recursos humanos, os seguintes "repositórios" funcionários em férias, funcionários em aviso prévio, funcionários em licença maternidade, etc. A raiz da agregação é o funcionário!



Outra coisa, sei que a interface do repositório faz parte do domínio, mas existe algumas dúvidas em relação ao seu uso diretamente nas Entidades. Perceba que os métodos do repositório podem receber como parâmetros objetos de negócio do domínio, então em uma entidade talvez não seja natural acessar tais métodos, já que isto levaria a um acoplamento da entidade a conceitos não naturalmente acoplados a ela.

Em relação a implementação de regras de negócio na classe que implementa a interface do repositório sou contra. Evans deixa claro que o papel dos repositórios e a reconstituição ou simples contagem de objetos. No seu exemplo, IMHO, estas regras deveriam ser escritas em um serviço (logicamente com o auxílo do repositório) ou até mesmo em uma entidade que acesse o repositório. Em seu exemplo, o cumprimento das regras de negócio envolvidas na operação "obter produtos disponíveis na data de entrega" vai além das responsabilidades de um repositório.</description>
		<content:encoded><![CDATA[<p>Rodrigo Yoshima,</p>
<p>A respeito do repositório PedidosFaturados, lhe pergunto, qual a sua agregação neste caso, sim porque o Evans deixa claro que os repositórios devem ser descritos para uma agregação,  Perceba que pedidos faturados é uma característica do pedido, o conceito de negócio é o pedido e provavelmente deve ser a sua raiz de agregação. Imagine em um sistema grande, criar repositórios para cada carecterística forte de um conceito, imagine, por exemplo, no domínio de negócio recursos humanos, os seguintes &#8220;repositórios&#8221; funcionários em férias, funcionários em aviso prévio, funcionários em licença maternidade, etc. A raiz da agregação é o funcionário!</p>
<p>Outra coisa, sei que a interface do repositório faz parte do domínio, mas existe algumas dúvidas em relação ao seu uso diretamente nas Entidades. Perceba que os métodos do repositório podem receber como parâmetros objetos de negócio do domínio, então em uma entidade talvez não seja natural acessar tais métodos, já que isto levaria a um acoplamento da entidade a conceitos não naturalmente acoplados a ela.</p>
<p>Em relação a implementação de regras de negócio na classe que implementa a interface do repositório sou contra. Evans deixa claro que o papel dos repositórios e a reconstituição ou simples contagem de objetos. No seu exemplo, IMHO, estas regras deveriam ser escritas em um serviço (logicamente com o auxílo do repositório) ou até mesmo em uma entidade que acesse o repositório. Em seu exemplo, o cumprimento das regras de negócio envolvidas na operação &#8220;obter produtos disponíveis na data de entrega&#8221; vai além das responsabilidades de um repositório.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>por: Otávio</title>
		<link>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7219</link>
		<pubDate>Wed, 23 Sep 2009 19:31:52 +0000</pubDate>
		<guid>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7219</guid>
					<description>Obrigado pela resposta Rodrigo, me expressei de forma equivocada, quando quis dizer validações de entidade, estava falando de verificar se a entidade populada por exemplo que recebi de um client, esta com os argumentos válidos, seguindo a idéia de "contratos" (Verifico a entrada para saber se é válido o objeto). Onde ficaria estas validações? não imagino como ficaria isso na própria entidade. E uma coisa que acho que estava quebrando um pouco meu DDD, é utilizar Repository como se fosse um DAO, uma classe que fornece recurso externos para o objeto (entidade) em questão, mais pelo que vi vc descrever o repository envolve regras de negócio do domínio tb, e não apenas na entidade.</description>
		<content:encoded><![CDATA[<p>Obrigado pela resposta Rodrigo, me expressei de forma equivocada, quando quis dizer validações de entidade, estava falando de verificar se a entidade populada por exemplo que recebi de um client, esta com os argumentos válidos, seguindo a idéia de &#8220;contratos&#8221; (Verifico a entrada para saber se é válido o objeto). Onde ficaria estas validações? não imagino como ficaria isso na própria entidade. E uma coisa que acho que estava quebrando um pouco meu DDD, é utilizar Repository como se fosse um DAO, uma classe que fornece recurso externos para o objeto (entidade) em questão, mais pelo que vi vc descrever o repository envolve regras de negócio do domínio tb, e não apenas na entidade.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>por: Rodrigo Yoshima</title>
		<link>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7139</link>
		<pubDate>Wed, 16 Sep 2009 13:43:30 +0000</pubDate>
		<guid>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7139</guid>
					<description>@Hamom

Isso mesmo! O termo PedidosFaturados era tão recorrente e tinha tanta coisa que acontecia com eles especificamente que valeu a pena criar um elemento com semântica própria.

@Otávio
Os services na maioria das vezes orquestram algumas tarefas que  não são naturalmente alocáveis a nenhuma entidade. O melhor exemplo é o faturamento. Para faturar é necessário mudar o status do pedido, emitir uma nota fiscal, analisar crédito do cliente, gerar duplicatas e etc... Como o próprio Evans diz, certos elementos não são coisas, são processos. Validações da entidade estão na própria entidade. Sobre Layering (camadas) a discussão é grande, mas é comum aparecer esse padrão que você falou, a tela associada a uma facade de aplicação e a facade lidando com o domínio. Nada impede que um elemento de domínio vaze para a tela.</description>
		<content:encoded><![CDATA[<p>@Hamom</p>
<p>Isso mesmo! O termo PedidosFaturados era tão recorrente e tinha tanta coisa que acontecia com eles especificamente que valeu a pena criar um elemento com semântica própria.</p>
<p>@Otávio<br />
Os services na maioria das vezes orquestram algumas tarefas que  não são naturalmente alocáveis a nenhuma entidade. O melhor exemplo é o faturamento. Para faturar é necessário mudar o status do pedido, emitir uma nota fiscal, analisar crédito do cliente, gerar duplicatas e etc&#8230; Como o próprio Evans diz, certos elementos não são coisas, são processos. Validações da entidade estão na própria entidade. Sobre Layering (camadas) a discussão é grande, mas é comum aparecer esse padrão que você falou, a tela associada a uma facade de aplicação e a facade lidando com o domínio. Nada impede que um elemento de domínio vaze para a tela.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>por: Otávio</title>
		<link>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7130</link>
		<pubDate>Wed, 16 Sep 2009 01:13:50 +0000</pubDate>
		<guid>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7130</guid>
					<description>Olá Rodrigo, parabéns pela iniciativa de escrever sobre DDD, estou muito interessado em aprender realmente DDD, até consegui entender vários pontos, mais ainda tenho algumas duvidas, uma delas é a seguinte se a minha regra de negócio fica na entidade (quando diz respeite a seu estado) e no repository, o que sobra para o service? Validações da entidade? E a outra pergunta é a seguinte, sempre da minha camada de apresentação, tenho que chamar minha service(Aplicação) que chama assim o repositorio(Dominio)? Se algum conceito estiver errado por favor me corriga. E seria pedir demais, pra quando tiver um tempo disponibilizar um CRUD da vida em java aplicando DDD?

Abraço</description>
		<content:encoded><![CDATA[<p>Olá Rodrigo, parabéns pela iniciativa de escrever sobre DDD, estou muito interessado em aprender realmente DDD, até consegui entender vários pontos, mais ainda tenho algumas duvidas, uma delas é a seguinte se a minha regra de negócio fica na entidade (quando diz respeite a seu estado) e no repository, o que sobra para o service? Validações da entidade? E a outra pergunta é a seguinte, sempre da minha camada de apresentação, tenho que chamar minha service(Aplicação) que chama assim o repositorio(Dominio)? Se algum conceito estiver errado por favor me corriga. E seria pedir demais, pra quando tiver um tempo disponibilizar um CRUD da vida em java aplicando DDD?</p>
<p>Abraço
</p>
]]></content:encoded>
				</item>
	<item>
		<title>por: Hamon Vitorino</title>
		<link>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7043</link>
		<pubDate>Wed, 09 Sep 2009 22:28:24 +0000</pubDate>
		<guid>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7043</guid>
					<description>Rodrigo, specifications devem apoiar-se em termos recorrentes da linguagem, mais precisamente nos predicados que podemos aplicar a uma entidade.
Se entendi bem o que você quis dizer, a criação do repositório PedidosFaturados deu-se devido à existência de predicados aplicáveis somente a esse tipo de Pedido, correto?</description>
		<content:encoded><![CDATA[<p>Rodrigo, specifications devem apoiar-se em termos recorrentes da linguagem, mais precisamente nos predicados que podemos aplicar a uma entidade.<br />
Se entendi bem o que você quis dizer, a criação do repositório PedidosFaturados deu-se devido à existência de predicados aplicáveis somente a esse tipo de Pedido, correto?
</p>
]]></content:encoded>
				</item>
	<item>
		<title>por: Rodrigo Yoshima</title>
		<link>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7042</link>
		<pubDate>Wed, 09 Sep 2009 18:22:29 +0000</pubDate>
		<guid>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7042</guid>
					<description>Mateus, é possível fazer com AOP, mas deve valer a pena colocar essa complexidade. As vezes isso prejudica um pouco a testabilidade se o que você for injetar for difícil de mockar.

Hamon, uso Specifications mais para "buscas que podem receber vários parâmetros opcionais", como uma tela de busca e coisas do tipo. Usar specification para termos firmes da linguagem do domínio fica pouco ubiquitous. Entendeu? Note também que neste caso em específico "PedidosFaturados" só foi criado pois era um termo recorrente na linguagem. Para esse caso fez sentido criar um elemento com semântica própria.</description>
		<content:encoded><![CDATA[<p>Mateus, é possível fazer com AOP, mas deve valer a pena colocar essa complexidade. As vezes isso prejudica um pouco a testabilidade se o que você for injetar for difícil de mockar.</p>
<p>Hamon, uso Specifications mais para &#8220;buscas que podem receber vários parâmetros opcionais&#8221;, como uma tela de busca e coisas do tipo. Usar specification para termos firmes da linguagem do domínio fica pouco ubiquitous. Entendeu? Note também que neste caso em específico &#8220;PedidosFaturados&#8221; só foi criado pois era um termo recorrente na linguagem. Para esse caso fez sentido criar um elemento com semântica própria.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>por: Hamon Vitorino</title>
		<link>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7032</link>
		<pubDate>Wed, 09 Sep 2009 06:35:29 +0000</pubDate>
		<guid>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-7032</guid>
					<description>Ótimo post, Rodrigo.
Estou lendo o livro DDD, do Evans, e fiquei com uma dúvida quanto a sua implementação: não percebi a necessidade de criação de dois respositórios para a entidade Pedido (TodosPedidos e PedidosFaturados). Não seria "Faturado" um predicado de Pedido? Dessa maneira, teríamos apenas a interface Pedidos e, poderíamos implementar esse predicado como uma especificação(Specification pattern). Escrevi um pouco sobre essa implementação no meu blog (http://hamonvitorino.wordpress.com/2009/09/03/ddd-implementando-repository-com-specifications/) e gostaria de entender o motivo da sua abordagem.

Abraços</description>
		<content:encoded><![CDATA[<p>Ótimo post, Rodrigo.<br />
Estou lendo o livro DDD, do Evans, e fiquei com uma dúvida quanto a sua implementação: não percebi a necessidade de criação de dois respositórios para a entidade Pedido (TodosPedidos e PedidosFaturados). Não seria &#8220;Faturado&#8221; um predicado de Pedido? Dessa maneira, teríamos apenas a interface Pedidos e, poderíamos implementar esse predicado como uma especificação(Specification pattern). Escrevi um pouco sobre essa implementação no meu blog (http://hamonvitorino.wordpress.com/2009/09/03/ddd-implementando-repository-com-specifications/) e gostaria de entender o motivo da sua abordagem.</p>
<p>Abraços
</p>
]]></content:encoded>
				</item>
	<item>
		<title>por: Mateus</title>
		<link>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-6984</link>
		<pubDate>Sat, 05 Sep 2009 23:03:18 +0000</pubDate>
		<guid>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-6984</guid>
					<description>Rodrigo,

Mesmo com AOP ou Hibernate interceptores ainda falta uma perna com relação a injeção de Repositories. Quando eu dou apenas um "new" em meu POJO, como os repositories seriam injetados automaticamente? Via AOP é possível?

Abraço</description>
		<content:encoded><![CDATA[<p>Rodrigo,</p>
<p>Mesmo com AOP ou Hibernate interceptores ainda falta uma perna com relação a injeção de Repositories. Quando eu dou apenas um &#8220;new&#8221; em meu POJO, como os repositories seriam injetados automaticamente? Via AOP é possível?</p>
<p>Abraço
</p>
]]></content:encoded>
				</item>
	<item>
		<title>por: Rodrigo Yoshima</title>
		<link>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-6834</link>
		<pubDate>Wed, 26 Aug 2009 17:24:22 +0000</pubDate>
		<guid>http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/#comment-6834</guid>
					<description>Guilherme, eu considero o empacotamento também algo do domínio, isto é, muito do empacotamento eu também discuto com o usuário, principalmente o empacotamento do domínio.</description>
		<content:encoded><![CDATA[<p>Guilherme, eu considero o empacotamento também algo do domínio, isto é, muito do empacotamento eu também discuto com o usuário, principalmente o empacotamento do domínio.
</p>
]]></content:encoded>
				</item>
</channel>
</rss>
