<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)"]]></title>
		<link>http://www.guj.com.br/posts/list/12.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Muito tem se falado no grupo sobre DDD, Repository, Domain Model, etc.<br /> Contudo estou tendo muita dificuldade para tornar estes conceitos práticos, utilizando JavaEE.<br /> <br /> Por exemplo:<br /> Quem orquestra os objetos de domínio é uma [b]ServiceLayer[/b], no meu caso um Stateful ou Stateless do Seam.<br /> <br /> Meu [b]DomainModel[/b] é constituído de Entitys(Objetos com identidade) com lógicas de negócio além obviamente de seus atributos  :arrow:  no meu caso ele é uma classe [b]JPA anotada com @Entity[/b].<br /> <br /> [code]<br /> @Entity<br /> @Name("user")<br />     public class User implements Serializable {<br />         ...<br />      }<br /> [/code]<br /> <br /> Na maioria das vezes as lógicas neles contidas precisam de um acesso a banco, então eles levam um (ou varios) repository consigo... como atributo da classe ou dentro do próprio método.<br /> <br /> [code]<br /> @Entity<br /> @Name("user")<br /> public class User implements Serializable {<br /> 	@Transient	<br /> 	RepositoryUser repositoryUser;<br /> 	<br /> 	...<br /> }<br /> [/code]<br /> <br /> Então começam alguns problemas. Meu Entity deveria receber injeção deste repository... porém como o Entity é carregado por JPA, eu não consigo injetar nenhum objeto nem por @In do Seam nem mesmo por Spring.<br /> <br /> [code]<br /> @Entity<br /> @Name("user")<br /> public class User implements Serializable {<br /> 	<br /> 	//nao funciona a Injecao pq eh em entity<br /> 	@In<br /> 	@Transient	<br /> 	RepositoryUser repositoryUser;  <br /> 	<br /> 	...<br /> }<br /> [/code]<br /> <br /> <br /> Uma solução seria fazer com que a ServiceLayer enviasse por "set" um repository para o Entity. Mas o código do Service iria ficar poluido, tendo um repository que ele nem faz uso, só instancia para o entity. Toda vez que fosse utilizar uma lógica de negócio do entity que utiliza acesso a banco, teria que minha outra camada  setar o repository pra ele.<br /> <br /> [code]<br /> /*A ServiceLayer*/<br /> @Stateless<br /> @Name("authenticator")<br /> public class AuthenticatorService implements Authenticator{<br /> <br /> 	@In(create=true) <br /> 	@Out <br /> 	User user;<br /> <br /> 	@In<br /> 	private RepositoryUser repositoryuser;<br /> <br /> 	public boolean authenticate(){<br /> <br /> 	   //setando porcamente o repositorio	<br />            user.setRepository(repositoryuser);<br />            user.authByNameAndPass();	<br />            ...<br /> <br />          }				<br /> }<br /> [/code]<br /> Qual seria uma outra solução que poderia ser adotada? Mesmo com o advento do JavaEE 5 com tantos frameworks de D.I. vou ter que utilizar ServiceLocator para localizar Repository nos entitys?<br /> <br /> []´s<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/369353/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/369353/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Thu, 27 Sep 2007 10:30:18]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote]... porém como o Entity é carregado por JPA, eu não consigo injetar nenhum objeto nem por @In do Seam nem mesmo por Spring. [/quote]Com Spring 2.0 vc pode injetar dependências em objetos criados fora do conteiner, vc tem até mesmo duas opções, por AOP ou por chamada explicita do BeanFactory, Urubatan corrija-me se estiver errado <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0">  ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/369569/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/369569/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Thu, 27 Sep 2007 19:27:36]]> GMT</pubDate>
				<author><![CDATA[ Ednelson]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Isso é mesmo possível? Impressionante!<br /> Bom, acabei descobrindo tbm que consigo acessar qualquer componente do Seam através de Componente.getInstance("nomeDoComponente"). Mesmo abstraindo este acesso nos objetos de entidade, não me parece uma coisa muito elegante, contudo ao que parece utilizando o Seam não tenho outra saida.<br /> <br /> Ou Tenho?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/369583/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/369583/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Thu, 27 Sep 2007 20:14:40]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ No Hibernate (mesmo usando JPA) voce pode adicionar um Interceptor que toda vez que um bean sai do entity manager/session, o setXXXRepository é invocado.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/369592/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/369592/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Thu, 27 Sep 2007 20:52:00]]> GMT</pubDate>
				<author><![CDATA[ Paulo Silveira]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Paulo,<br /> <br /> Mas esses interceptors fazem parte da spec de JPA? Porque se não fizer, qual o sentido de utilizar JPA se o sistema só irá funcionar com a implementação do hibernate?<br /> <br /> []s<br /> <br /> Ferry]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/369653/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/369653/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 28 Sep 2007 08:40:50]]> GMT</pubDate>
				<author><![CDATA[ Ferryman]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Me falta tempo, mas eu tô tentando resolver justamente esses problemas no: <a class="snap_shots" href="http://sourceforge.net/projects/hinjector/" target="_blank" rel="nofollow">http://sourceforge.net/projects/hinjector/</a>]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/370909/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/370909/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 2 Oct 2007 08:39:13]]> GMT</pubDate>
				<author><![CDATA[ Fabio Kung]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository) - RESOLVIDO</title>
				<description><![CDATA[ Bom, fiz algo que ficou bem interessante:<br />  - Um Aspecto que intercepta a instanciação de todas as classes do meu pacote com classes de entidades, injetando neste momento as dependências que forem necessárias. O legal é que fica completamente transparente para o desenvolvedor.<br /> <br /> Com isso tanto faz se a instanciação for através de "new", "jpa" ou qualquer outro framework, a injeção vai funcionar do mesmo jeito.<br /> <br /> Veja o código usando AspectJ:<br /> <br /> [code]<br /> <br /> public aspect InjectEntity{<br /> <br />    //pointcut criado para interceptar na instanciacao de uma classe   <br />   // br.com.siq.entity é o pacote onde estao minhas entidades<br />   pointcut inject() : initialization(public br.com.siq.entity.*.new ());<br /> <br />  //execucao do aspecto apos concluida (advice after) a instanciacao da classe<br />        after():inject(){<br />  //obtendo o objeto em questao (joinpoint)<br />                Object obj = thisJoinPoint.getThis();<br />               <br /> //variaveis que injetarao em um determinado atributo<br />                String valueOfContextVariable = null;<br />                Boolean createContextVariable=false;<br /> <br /> <br /> //Procurando anotacao de injecao na classe, no caso do Seam o "In.class"<br />                for(Field field:obj.getClass().getDeclaredFields()){<br />                        if(field.isAnnotationPresent(In.class)){<br />                                In in = field.getAnnotation(In.class);<br /> <br /> //se a anotacao nao tem o atributo value setado, utilizar o nome do campo<br />                                if(in.value().equals("")){<br />                                        valueOfContextVariable = field.getName();<br /> //caso contrario utilizar o atributo value<br />                                }else{<br />                                        valueOfContextVariable = in.value();<br />                                }<br /> <br />  //verificar se esta anotado como create<br />                                if(in.create())<br />                                        createContextVariable = true;<br />         <br /> //tornando acessivel o atributo caso ele seja private, para ser possivel fazer a injecao <br />                                field.setAccessible(true);<br /> <br />                                try {<br /> //injetando no atributo, como uso  JBossSeam obtenho a referencia atraves do<br /> //Component.getInstance() , mas poderia ser qualquer coisa,<br /> //como um applicationContext do Spring<br />                                        field.set(obj, Component.getInstance(valueOfContextVariable, createContextVariable));<br />                                } catch (Exception e) {<br /> //escrever  aqui rotina de excecao<br />                                }<br />                        }<br />                }<br />        }<br /> <br /> [/code]<br /> <br /> Na entidade, basta anotar:<br /> <br /> [code]<br /> <br /> @In<br />  private Repository repository;<br /> <br /> [/code]<br /> <br /> O Código do Aspecto pode ser melhorado, como incluir suporte para injecao pelo método "set", mas esse foi apenas um esboço de como pode ser feito.<br /> <br /> []'s<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372640/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository---resolvido
</guid>
				<link>http://www.guj.com.br/prepost/70275/372640/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository---resolvido
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 08:58:25]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]<br /> Na maioria das vezes as lógicas neles contidas precisam de um acesso a banco, então eles levam um (ou varios) repository consigo... como atributo da classe ou dentro do próprio método.<br /> <br /> [/quote]<br /> <br /> Hmmm... lógica de acesso a banco nos Entitys... estranho isso...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372648/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372648/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 10:11:29]]> GMT</pubDate>
				<author><![CDATA[ andre_salvati]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Lógica de acesso a banco? Onde?<br /> <br /> A entidade tem acesso ao "[b]repositório[/b]", que de nada tem haver com "[b]Lógica de acesso ao banco[/b]".  O [b]repositório[/b] tem "intimidade" com a [b]lógica de negócio[/b], faz parte dela, nada mais justo que estar no [b]modelo de domínio[/b].<br /> <br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372651/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372651/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 10:33:41]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Mas concordo que fui infeliz na minha afirmação do primeiro post " [i]precisam de um acesso a banco[/i]", o q queria dizer foi:<br /> "[b]precisam de um acesso ao repositório[/b]".]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372653/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372653/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 10:53:43]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]Mas concordo que fui infeliz na minha afirmação do primeiro post " [i]precisam de um acesso a banco[/i]", o q queria dizer foi:<br /> "[b]precisam de um acesso ao repositório[/b]".[/quote]<br /> <br /> Continua estranho, Entitys dependendo de Repositories....]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372668/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372668/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 11:49:11]]> GMT</pubDate>
				<author><![CDATA[ andre_salvati]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ A dependencia é injetada, entao nao vejo problema. O fato de ser um repository dentro de um entity tbm não encontro nada de errado, ambos fazem parte da lógica de negócio.... mais uma vez.... REPOSITÓRIO É NEGÓCIO..]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372676/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372676/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 12:17:14]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]A dependencia é injetada, entao nao vejo problema. O fato de ser um repository dentro de um entity tbm não encontro nada de errado, ambos fazem parte da lógica de negócio.... mais uma vez.... REPOSITÓRIO É NEGÓCIO..[/quote]<br /> <br /> Correto. A falta de entendimento das pessoas sobre Repositories x DAOs causa este tipo de confusão mas basta ler a bibliografia para entender que um Repositório é parte do domínio e por isso não há qualquer problemas em relacionar entidades à ele.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372680/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372680/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 12:30:56]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]A dependencia é injetada, entao nao vejo problema. O fato de ser um repository dentro de um entity tbm não encontro nada de errado, ambos fazem parte da lógica de negócio.... mais uma vez.... REPOSITÓRIO É NEGÓCIO..[/quote]<br /> <br /> A questão é a forma como ela é injetada (lembre-se do princípio do KIS).  <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"><br /> <br /> Os Repositories - e os DAOs dos quais eles dependem, já que vc prefere assim - dependem do Service e não dos Entitys.<br /> <br /> Dê um olhada no caveatemptor (aplicação de referência para uso de Hibernate).]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372683/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372683/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 12:49:17]]> GMT</pubDate>
				<author><![CDATA[ andre_salvati]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Taz, vc pde injetar por "set" sendo enviado pelo Service, como mostrei no primeiro post, gerando o problema que tbm já mostrei.<br /> <br /> O que fiz, via annotation, faz a injeção pelo SEAM (por debaixo dos panos do aspecto), não a nada de errado nisso... a dependencia foi invertida.<br /> <br /> Você não esta sendo claro, ou não esta entendendo.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372686/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372686/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 12:59:55]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]<br /> <br /> Você não esta sendo claro, ou não esta entendendo.<br /> <br /> [/quote]<br /> <br /> Esqueceu de levantar a possibilidade de que vc não esteja entendendo. Dê uma olhada na aplicação de referência que te falei e nos exemplos de JBoss Seam (que não são poucos). Depois discutimos....]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372689/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372689/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 13:11:33]]> GMT</pubDate>
				<author><![CDATA[ andre_salvati]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ De fato não olhei estes codigos, assim como também não sei pq deveria.  Não tenho dúvidas de como usar "repository", e sim "tinha" de como injeta-los no load de algum framework de persistencia (o que foi resolvido via Aspect).<br /> <br /> Portanto Taz, dispenso a discussão, o foco desta thread não foi este. Quem achou estranho usar repository em entity foi você (o que o Shoes desmistificou muito bem).<br /> <br /> Se você esta com dificuldade de entender repositories em entities, abra uma thread sobre isso.<br /> <br /> Boa Sorte.<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372697/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372697/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 14:19:16]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ <br /> <br /> Belez...<br /> <br /> "O pior cego é aquele que não quer ver" (ditado popular)<br /> <br /> Abraço e boa sorte (vc vai precisar se não estudar os exemplos)  <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372699/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372699/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 14:38:35]]> GMT</pubDate>
				<author><![CDATA[ andre_salvati]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Taz, eu sei como o Hibernate trabalha com interceptors, tbm sei como delegar isso para service. <br /> <br /> Contudo não quero dependencia dos interceptors Hibernate (eu posso instanciar minha entidade atraves de "new", nesta caso o Interceptor do hibernate não me ajudaria) e tbm não quero associar metodos de negocios do repositorio na ServiceLayer, mas sim na minha entidade de domínio. Eu não preciso ler fontes dos exemplos do Hibernate para isso, sei o que quero ou não fazer, assim como não sei de nenhuma literatura mencionando que o que fiz esta quebrando algum conceito OO.<br /> <br /> "O pior orador é aquele que se pronuncia sem necessidade alguma"  <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0"> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372702/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372702/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 15:00:22]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Taz]<br /> <br /> Belez...<br /> <br /> "O pior cego é aquele que não quer ver" (ditado popular)<br /> <br /> Abraço e boa sorte (vc vai precisar se não estudar os exemplos)  <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"> [/quote]<br /> <br />   O problema é que as duvidas dele nao sao referentes ao Sean mas sim se tem como aplicar DDD com o Sean. Ai faz sentido ter repositorios dentro dos entities (entities do DDD).<br /> <br />   ]['s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372721/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372721/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 16:30:17]]> GMT</pubDate>
				<author><![CDATA[ fabio.patricio]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Você entendeu Fabio, é isso mesmo a duvida que tinha quando criei o tópico.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372722/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372722/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 6 Oct 2007 16:36:59]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=fabio.patricio][quote=Taz]<br /> <br /> Belez...<br /> <br /> "O pior cego é aquele que não quer ver" (ditado popular)<br /> <br /> Abraço e boa sorte (vc vai precisar se não estudar os exemplos)  <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"> [/quote]<br /> <br />   O problema é que as duvidas dele nao sao referentes ao Sean mas sim se tem como aplicar DDD com o Sean. Ai faz sentido ter repositorios dentro dos entities (entities do DDD).<br /> <br />   ]['s[/quote]<br /> <br /> Ok, vamos falar em DDD.<br /> <br /> Seguem trechos do capítulo "Repositories" do Livro do Eric Evans (Domain Driven Design Complexity In Software):<br /> <br /> Onde ele fala que são os Entitys que acessam os malditos Repositories!? Todos os diagramas que ele desenha no livro mostram os "Clients" acessando os REPOSITORIES.<br /> <br /> [quote=Evans]Clients request objects from the REPOSITORY using query methods that select objects based on<br /> criteria specified by the client, typically the value of certain attributes. The REPOSITORY retrieves<br /> the requested object, encapsulating the machinery of database queries and metadata mapping. <br /> <br /> (...)<br /> <br /> Provide REPOSITORIES only for AGGREGATE roots<br /> that actually need direct access. Keep the client focused on the model, delegating all<br /> object storage and access to the REPOSITORIES.<br /> [/quote]<br /> <br /> Sabe o que são AGGREGATES!? Procure no mesmo livro que ele te explica.<br /> <br /> [quote=Evans]<br /> A REPOSITORY "contains" all instances of a specific type, but this does not<br /> mean that you need one REPOSITORY for each class.<br /> [/quote]<br /> <br /> Traduzindo: Vc não precisa criar um repositório para cada classe.<br /> <br /> [quote=Evans]<br /> It is tempting to commit after<br /> saving, for example, but the client presumably has the context to correctly initiate and<br /> commit units of work. Transaction management will be simpler if the REPOSITORY keeps its<br /> hands off.<br /> [/quote]<br /> <br /> Traduzindo: Como ficaria o controle da transação se ele não fosse feito pelo cliente!?<br /> <br /> E caso vc ainda acredite que esteja subvertendo seu modelo de domínio, o que é muito difícil quando se faz o uso correto do Hibernate...<br /> <br /> [quote=Evans]In general, don't fight your frameworks. Seek ways to keep the fundamentals of domain-driven<br /> design and let go of the specifics when the framework is antagonistic. Look for affinities between<br /> the concepts of domain-driven design and the concepts in the framework<br /> [/quote]<br /> <br /> Por esses e outros motivos, repito...<br /> <br /> [quote=Taz]<br /> Continua estranho, Entitys dependendo de Repositories....<br /> [/quote]<br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372899/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372899/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 7 Oct 2007 21:45:10]]> GMT</pubDate>
				<author><![CDATA[ andre_salvati]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Capacidade de abstração, ou neste caso a falta dela, é uma coisa muito interessante. É fácil perceber quando algum trecho foi pego sem entendimento do contexto (especialmente quando o contexto é composto por 500+ páginas de texto denso) pela forma como alguém se atem à trechos que sozinhos não têm qualquer significado.<br /> <br /> Entity é um padrão, página 89. Repository é um padrão, página 147. Aggregate também, página 125. Não existe um padrão 'client'. por que será? Porque o cliente de algo é simplesmente o que precisa de acesso a este, no caso específico cliente pode ser um Entity. Claro que poderiam haver diagramas mostrando cada uma das possibilidades, entity x repository, service x repository, specification x xrepository... só que haveriam algumas dezenas de páginas a mais a toa.<br /> <br /> O texto não traz uma definição de 'cliente', talvez porque... uhm... seja bem obvio quando se tenta.. uhm... ler o dito cujo. Por exemplo quando factories são definidas temos:<br /> <br /> [quote]<br /> But shifting responsibility to the other interested party, the client object in the application, leads to even worse problems. The client knows what job needs to be done and relies on the domain objects to carry out the necessary computations. [...] Even worse, if the client is part of the application layer, then responsibilities have leaked out of the domain layer altogether. <br /> [/quote]<br /> <br /> ou seja: o cliente [b]pode[/b] ser Camada de Aplicação, mas não necessariamente.<br /> <br /> Mas para entender mais profundamente o texto de Evans (coisa que só é necessária quando você está estudando DDD em um nível mais profundo ou quando precisa refutar uma desinformação, que é o caso) é necessário pesquisar no seu antecessor, amplamente referenciado por este: Fowler no seu POEAA. E uma das coisas mais legais do Fowler é que ele consegue responder este tipo de dúvida com um exemplo claro, como este retirado do livro (pagina 325, no capítulo sobre Repository):<br /> <br /> [code]<br /> public class Person { <br />    public List dependents() {<br />       Repository repository = Registry.personRepository();<br />       Criteria criteria = new Criteria();<br />       criteria.equal(Person.BENEFACTOR, this);<br />       return repository.matching(criteria);<br />    }<br /> }<br /> [/code]<br /> <br /> <br /> <br /> Veja que curioso: uma entidade referenciando a seu próprio Repositório. Onde mesmo que havia visto isso? E veja só, ainda usa Registry.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372913/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372913/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 7 Oct 2007 22:50:12]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=pcalcado]Veja que curioso: uma entidade referenciando a seu próprio Repositório. Onde mesmo que havia visto isso? E veja só, ainda usa Registry.[/quote]<br /> <br />   Uma coisa que vem ficando cada vez mais frequente no GUJ é certos usuários acharem que só eles leram os livros/artigos/papers/coloque aqui sua fonte preferida. Essa resposta do Taz fazendo como se ele fosse o unico e ter lido esse livro me fez procurar o e-mail da primeira vez que eu ouvi falar dessa obra do Evans.  Quem me falou disso a primeira vez foi o Marcos Pereira (usuario aqui do GUJ tb) la em 2004 acredito que pouco tempo depois do livro ter sido lancado.<br /> <br />   Ps.: Desculpem o desabafo, mas esse tipo de coisa no GUJ vem se tornando frequente e enche um pouco o saco.<br /> <br />   ]['s<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372916/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372916/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 7 Oct 2007 23:08:53]]> GMT</pubDate>
				<author><![CDATA[ fabio.patricio]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Eu tenho quase certeza que a pimeira referência que vi foi aqui no GUJ pelo cv (e vindod e quem vem não estranharia se fosse a primeira vez que isso apareceu num site em português <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0">). Infelizmente o grande apagamento dos posts de uns dois anos atrás levou a mensagem para o limbo.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372917/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372917/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 7 Oct 2007 23:14:07]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=fabio.patricio]<br /> <br />    Uma coisa que vem ficando cada vez mais frequente no GUJ é certos usuários acharem que só eles leram os livros/artigos/papers/coloque aqui sua fonte preferida.<br /> <br /> [/quote]<br /> <br /> Não deveria haver motivos para mágoas. Eu não disse que só eu havia lido...  :wink:<br /> <br /> Quanto ao outro rapaz, percebo certa rispidez em sua réplica, o que já é um comportamento histórico que pode ser ocasionado por uma certa insegurança.... Por outro lado, o mesmo reclama de lidar com pessoas que não se atêm à bibliografias. Quando encontra alguém que lê, deveria ter uma postura mais aberta... <br /> <br /> Uma pena que ele não percebe que o Hibernate converte aquilo que ele escreveu:<br /> <br /> [code]public class Person {   <br />     public List dependents() {  <br />        Repository repository = Registry.personRepository();  <br />        Criteria criteria = new Criteria();  <br />        criteria.equal(Person.BENEFACTOR, this);  <br />        return repository.matching(criteria);  <br />     }  <br /> }  <br /> [/code]<br /> <br /> por isso (obviamente em um contexto "managed")...<br /> <br /> [code]public class Person {   <br />     public List getDependents() {  <br />        return dependents;  <br />     }  <br /> }  <br /> [/code]<br /> <br /> Ou seja, o Hibernate contém o próprio Repositorio em si...<br /> <br /> Lembrem-se:<br /> <br /> [quote=Evans]In general, don't fight your frameworks. Seek ways to keep the fundamentals of domain-driven<br /> design and let go of the specifics when the framework is antagonistic. Look for affinities between<br /> the concepts of domain-driven design and the concepts in the framework[/quote]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372921/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372921/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 7 Oct 2007 23:58:47]]> GMT</pubDate>
				<author><![CDATA[ andre_salvati]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Após aquele post todo cheio de referências e autoridade completamente furado (e pedir 'abertura' para engolir sua presunção) colar um trecho de um livro que já mostrou que não entende (ou será 'leu'?) é muita cara de pau. <br /> <br /> Quem quiser entender melhor sobre Hibernate & Repositories é legal olhar a lista de DDD, o que a pessoa escreveu aí em cima (pra variar) não condiz com a realidade da técnica. O trecho que ele postou substitui Registry por algum meio automático (talvez IoC) de injeção, mas a tecnologia utilizada não tem nada a ver com a aplicação ou não do padrão. Repositories podem ser criados para lidar diretamente com Hibernate, JDBC, search engines ou não, provavelmente delegando seu trabalho à DAOs e DataMappers em geral. Mas nem adianta tentar refutar com argumentos ou até mesmo referências bibliográficas, como se pôde perceber. O bichinho não anda, simples assim.<br /> <br /> O outro rapaz aqui (que você já chamou de desonesto neste fórum só por birra) não precisa ter insegurança, pelo menos não quanto à você. [url=http://guj.com.br/posts/listByUser/285/6813.java]Seu histórico aqui já o condena[/url] ([url=http://www.guj.com.br/posts/list/64771.java#342019]inclusive profissionalmente[/url], mas tudo bem, você não revela seu nome exatamente para não te reconhecerem, certo?), isso sem contar o portal Java...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372923/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372923/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 8 Oct 2007 00:03:25]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Apenas respondendo a sua pergunta Taz, sim eu conheço o que é Aggregate, assim como tbm sei que Repository não é um para cada classe. Agora o que não sei mesmo é o que isso tem haver com o que tenho postado ou oq já rolou neste tópico.<br /> <br /> Alguma vez afirmei que iria construir repositorios a torto direito para cada entidade minha?<br /> <br /> E que porcaria que você andou digitando sobre "Clients"?<br /> <br /> Quanto aos "clients", apenas completando o que Shoes já disse... vale comentar tbm que além de usar uma entidade (People), no livro de Fowler (POEAA) ele tbm usa duas classes "Strategy" com um Repository, o que nos mostra a flexibilidade do padrão.<br /> <br /> Mas é claro, não espero que Taz concorde com estas afirmações... Já discordou de mim, do Fabio Kung, do Sergio, do Phillip, do fabio.patricio, não duvido que ele discorde de Fowler tbm...<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372927/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372927/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 8 Oct 2007 01:13:00]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]<br /> Mas é claro, não espero que Taz concorde com estas afirmações... Já discordou de mim, do Fabio Kung, do Sergio, do Phillip, do fabio.patricio, não duvido que ele discorde de Fowler tbm...<br /> [/quote]<br /> <br /> Só é bom focarmos que discordar é ótimo. Eu discordo do Fowler bastante em DSLs, por exemplo. O ponto é ter um mínimo de respeito pelos outros e darmos base às nossas discordâncias, seja usando uma bibliografia ou argumentando. Pela minha experiência muitas discordâncias contra conceitos são na verdade falta de entendimento (desconfio que meu ponto de divergência com a coisa das DSLs seja exatamente porque ainda não as compreendo bem) e uma conversa e/ou debate ético e profissional são proveitosos para todos.<br /> <br /> O que não dá é atirar pedra em todo mundo sem sequer entender o que fala.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372931/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372931/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 8 Oct 2007 01:27:05]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ O problema Phillip é quando o "discordar" parece ser mais importante do que "compreender". Só depois de compreender um problema podemos "discordar" de alguma solução para tal, o que não ocorreu por aqui. <br /> <br /> PS: Você não apóia o uso de DSLs ? Eu particularmente detestava, até conhecer o Drools e como fazer regras de segurança com ele (o ruim não eram as DSLs e sim como cria-las , IMHO).]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372933/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372933/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 8 Oct 2007 01:44:15]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]<br /> PS: Você não apóia o uso de DSLs ? Eu particularmente detestava, até conhecer o Drools e como fazer regras de segurança com ele (o ruim não eram as DSLs e sim como cria-las , IMHO).[/quote]<br /> <br /> Sim, apóio e minha linha de estudo atual é exatamente sobre os conceitos envolvidos em LOP e DSLs: <a class="snap_shots" href="http://fragmental.tw" target="_blank" rel="nofollow">http://fragmental.tw</a><br /> <br /> Eu discordo de alguns conceitos do Fowler, por exemplo o conceito dele de LOP==DSL]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/372934/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/372934/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 8 Oct 2007 01:49:16]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=pcalcado]Após aquele post todo cheio de referências e autoridade completamente furado (e pedir 'abertura' para engolir sua presunção) colar um trecho de um livro que já mostrou que não entende (ou será 'leu'?) é muita cara de pau. [/quote]<br /> <br /> Ataques pessoais!? Lamentável um moderador adotar essa postura.<br /> <br /> [quote=pcalcado] O outro rapaz aqui (que você já chamou de desonesto neste fórum só por birra) ... [/quote]<br /> <br /> Magina, acho que vc havia cometido um engano ao falar que havia bloqueado meus e-mails, apesar de nunca ter te enviado qualquer coisa. Não precisa forçar neh!?<br /> <br /> Quanto à discussão, cada um faz suas escolhas e assume as consequências.<br /> <br /> Assunto encerrado.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/373270/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/373270/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 8 Oct 2007 16:53:36]]> GMT</pubDate>
				<author><![CDATA[ andre_salvati]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Só uma dúvida Lezinho...<br /> <br /> Estou usando Seam e EJB 3 e não tenho tido a necessidade de injetar Repositories nos Entities e sim alguns Services. (tenho um exemplo para aplicação Desktop em <a class="snap_shots" href="http://www.aspercom.com.br/bitshop" target="_blank" rel="nofollow">http://www.aspercom.com.br/bitshop</a>). Como são poucos casos, criei um Factoryzinho para injetar isso (se fosse muitos recorreria a AOP como vc fez).<br /> <br /> Quais situações você está sentindo a necessidade de injetar repositories? Seria para navegar numa associação derivada? Ou para "simular" uma associação n-aria?<br /> <br /> Abraços!<br /> <br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/374575/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/374575/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Thu, 11 Oct 2007 00:18:59]]> GMT</pubDate>
				<author><![CDATA[ rodrigoy]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Olá Rodrigo ...<br /> <br /> O repositório na entidade deve executar métodos de negócio a fim de recuperar elementos relevantes ao comportamento desta Entity, não precisa necessariamente ter uma ordem de relacionamento com a entidade.<br /> <br /> Agora uma Service, é um padrão que encapsula seu Domain MOdel. Ele antecede as Entidades e controla o fluxo das execuções. O comportamento da entidade (seus métodos de negócio) possui lógica, um service apenas opera como uma fachada. Sendo assim, uma entidade não deve invocar um service, e sim ser invocada por um.<br /> <br /> Para você visualizar o modelo de camadas proposto por Fowler e descrito no POEEA, veja uma breve descrição e um diagrama que aponta isso aqui:<br /> <br /> <a class="snap_shots" href="http://martinfowler.com/eaaCatalog/serviceLayer.html" target="_blank" rel="nofollow">http://martinfowler.com/eaaCatalog/serviceLayer.html</a><br /> <br /> PS: Veja que "DataSource Layer", que deve ser abstraída pelo Repository, esta encapsulada no Domain.<br /> <br /> []´s<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/375025/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/375025/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Thu, 11 Oct 2007 16:00:29]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Veja,<br /> <br /> Digamos que tenho repositórios de entidades diferentes (PessoaRepository e ContaRepository, por exemplo). Aih desejo que um mesmo DAO genérico implemente esses repositórios ( ao menos nos métodos que equivalem a operações CRUD ).<br /> <br /> Que estratégia devo tomar para conseguir isso? Dá pra usar interfaces e spring? Devo usar fachada? Como se daria isso?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378303/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378303/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 00:01:45]]> GMT</pubDate>
				<author><![CDATA[ BiraBoy]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=rodrigoy]Só uma dúvida Lezinho...<br /> <br /> Estou usando Seam e EJB 3 e não tenho tido a necessidade de injetar Repositories nos Entities e sim alguns Services. (tenho um exemplo para aplicação Desktop em <a class="snap_shots" href="http://www.aspercom.com.br/bitshop" target="_blank" rel="nofollow">http://www.aspercom.com.br/bitshop</a>). Como são poucos casos, criei um Factoryzinho para injetar isso (se fosse muitos recorreria a AOP como vc fez).<br /> <br /> Quais situações você está sentindo a necessidade de injetar repositories? Seria para navegar numa associação derivada? Ou para "simular" uma associação n-aria?<br /> <br /> Abraços!<br /> <br /> [/quote]<br /> <br /> Essa história de Repositories tá confundindo a cabeça do pessoal...  <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378420/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378420/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 09:33:47]]> GMT</pubDate>
				<author><![CDATA[ andre_salvati]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ É verdade. No meu caso, como estou acostumado a utilizar um DAO genérico com hibernate e somente criar DAO's específicos quando desejo uma consulta mais específica, estou pensando como se daria para as interfaces de Repositório do DomainModel serem implementadas pelo DAO genérico (ao menos nas funcionalidades que equivalem a CRUD) e só serem implementadas por DAO's específicos em caso de consultas específicas.<br /> <br /> Como poderia fazer isso?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378440/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378440/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 09:57:35]]> GMT</pubDate>
				<author><![CDATA[ BiraBoy]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=BiraBoy]<br /> Como poderia fazer isso?<br /> [/quote]<br /> <br /> Herança?<br /> <br /> [code]Repository<br /> public void store(Object obj){<br />    dao.save(obj);<br /> }<br /> <br /> ContaRepository extends Repository<br /> PessoRepository extends Repository[/code]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378545/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378545/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 12:21:12]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Beleza, e como faço para desacoplar o repositório da implementação com DAO's?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378609/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378609/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 13:41:59]]> GMT</pubDate>
				<author><![CDATA[ BiraBoy]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ A estratégia que eu uso é realmente utilizar Strategy  <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"><br /> <br /> Eu tenho uma interface DAO expondo métodos como do tipo (exemplificando):<br /> - read(String stringQuery);<br /> - read(String stringQuery, Object[] params);<br /> - read(String stringQuery, Map&lt;String, Object&gt; params);<br /> - getAll(Class clazz);<br /> - getById(Object id);<br /> - save(Object obj);<br /> - delete(Object obj);<br /> (etc)<br /> <br /> A implementação do DAO faz uso de JPA, Hibernate, Prevayler, ou seja lá o que for ...<br /> <br /> Tenho interfaces Repositories do tipo (RepositoryUser):<br /> <br /> - findUserByNameAndPassword(String name, String password);<br /> - addUsersWithValidRegisters(List&lt;User&gt; users);<br /> (etc)<br /> <br /> A implementação do repositório possui como atributo minha interface DAO definida anteriormente, e utilizo D.I.P. (no momento Seam) da implementação DAO desejada.<br /> <br /> Quando o repositório precisa realizar acesso ao framework de persistencia (ou outro recurso de persistencia) ele faz o uso do seu Dao injetado como Strategy.<br /> <br /> Assim o DAO continua com seu encapsulamento de acesso a dados, o repositório continua com a lógica, e a leitura do programa fica coesa.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378649/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378649/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 14:32:41]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=BiraBoy] Beleza, e como faço para desacoplar o repositório da implementação com DAO's?[/quote]<br /> <br /> .. o DAO esta desacoplado.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378657/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378657/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 14:43:26]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote] Herança? [/quote]<br /> <br /> Prefira composição a herança:<br /> <br /> <a class="snap_shots" href="http://javaboutique.internet.com/tutorials/Inherit_Compose/" target="_blank" rel="nofollow">http://javaboutique.internet.com/tutorials/Inherit_Compose/</a><br /> <a class="snap_shots" href="http://martinfowler.com/bliki/DesignedInheritance.html" target="_blank" rel="nofollow">http://martinfowler.com/bliki/DesignedInheritance.html</a><br /> <a class="snap_shots" href="http://blog.caelum.com.br/2006/10/14/como-nao-aprender-orientacao-a-objetos-heranca/" target="_blank" rel="nofollow">http://blog.caelum.com.br/2006/10/14/como-nao-aprender-orientacao-a-objetos-heranca/</a><br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378670/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378670/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 15:04:01]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho][quote] Herança? [/quote]<br /> <br /> Prefira composição a herança:<br /> <br /> <a class="snap_shots" href="http://javaboutique.internet.com/tutorials/Inherit_Compose/" target="_blank" rel="nofollow">http://javaboutique.internet.com/tutorials/Inherit_Compose/</a><br /> <a class="snap_shots" href="http://martinfowler.com/bliki/DesignedInheritance.html" target="_blank" rel="nofollow">http://martinfowler.com/bliki/DesignedInheritance.html</a><br /> <a class="snap_shots" href="http://blog.caelum.com.br/2006/10/14/como-nao-aprender-orientacao-a-objetos-heranca/" target="_blank" rel="nofollow">http://blog.caelum.com.br/2006/10/14/como-nao-aprender-orientacao-a-objetos-heranca/</a><br /> [/quote]<br /> <br /> Eu não concordo que isso se aplique aqui, mas se vc tem uma ideia de como composição pode resolver o problema do reaproveitamento de codigo que o BiraBoy explicou, venha ela ...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378685/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378685/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 15:23:23]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ ... composição resolve neste caso, conforme descrevi a uns 4 posts acima.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378692/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378692/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 15:29:21]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]... composição resolve neste caso, conforme descrevi a uns 4 posts acima.[/quote]<br /> <br /> ???<br /> <br /> Usar Strategy não é composição, é Strategy. Ter um objeto DAO injetado não resolve o problema exposto que é : não reimplementar funcções simples de CRUD para cada Repository. Então vc faria <br /> <br /> [code]<br /> abstract class Repository {<br />  <br />     protected DAO dao = DAOFactory.getDAO();<br /> <br /> <br />     public void store (Object obj){<br />          dao.save(obj);<br />     }<br /> <br />     public void remove(Object obj){<br />          dao.delete(obj);<br />     }<br /> <br /> }<br /> <br /> //e depois <br /> <br /> class ClientRepository extends Repository {<br /> <br />          public List&lt;Client&gt; clientesComPagamentoEmAtrazo(Date date){<br />                    // monta uma query e envia ao dao<br />                    // o dao é o mesmo que no pai. <br />                    return dao.list (Client.class,query);<br />          }<br /> <br />        // não é necessário implementar nem remove, nem save, nem nada que já exista no Repository  pai.<br /> }<br /> <br /> [/code]<br /> <br /> Como ClientRepository poderia reaproveitar o codigo de repository sem herança ?<br /> Bom poderia ser assim (com composição)<br /> <br /> [code]<br /> Repository é uma interface<br /> <br /> class GenericRepository implements Repository {<br /> <br />      private DAO dao = DAOFactory.getDAO();  <br /> <br />          public &lt;T&gt; List&lt;T&gt; list(Class&lt;T&gt; c , Query query ){<br />                  return dao.list(c,query);<br />          }<br /> <br />    public void store (Object obj){<br />          dao.save(obj);<br />     }<br /> <br />     public void remove(Object obj){<br />          dao.delete(obj);<br />     }<br /> }<br /> <br /> class ClientRepository  implements Repository {<br />  <br />          private final Repository generico = new GenericRepository();<br /> <br />          public List&lt;Client&gt; clientesComPagamentoEmAtrazo(Date date){<br />                    // monta uma query e envia ao dao<br />                    // o dao é o mesmo que no pai. <br />                    return generico.list(Client.class,query);<br />          }<br /> <br />       // repetição dos métodos da interfac Repository, que é exactemtne<br /> // o que não se quer fazer<br />    public void store (Object obj){<br />          generico.store (obj);<br />     }<br /> <br />     public void remove(Object obj){<br />          generico.remove(obj);<br />     }<br /> <br /> }[/code]<br /> <br /> Qual é a vantagem ? Herança não é mais simples ?<br /> Afinal ClientRepository É-UM Repository e mais do que isso ele SÓ-PODE-SER-UM reposiotry, que é a condição para que Repository seja uma classe abstract e ClientRepository a herde. Se Repository é uma interface eu poderia fazer       <br /> <br /> [code]XPTO extends HashMap implements Repository [/code]<br /> <br /> que não faz nenhum sentido. Então, não vejo como composição se encaixe melhor do que herança.<br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378714/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378714/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 16:15:50]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=BiraBoy]É verdade. No meu caso, como estou acostumado a utilizar um DAO genérico com hibernate e somente criar DAO's específicos quando desejo uma consulta mais específica, estou pensando como se daria para as interfaces de Repositório do DomainModel serem implementadas pelo DAO genérico (ao menos nas funcionalidades que equivalem a CRUD) e só serem implementadas por DAO's específicos em caso de consultas específicas.<br /> <br /> Como poderia fazer isso?[/quote]<br /> <br /> Eu tb uso DAOs genéricos, do jeito que os caras da Hibernate recomendam. Quando preciso de uma consulta mais específica, eu coloco no ObjetoDeDominioDAO (que extende a GenericDAO).<br /> <br /> Nunca precisei usar Repositories (pelo menos classes com o nome ObjetoDeDominioRepository) e consigo ter um modelo arquitetural bastante enxuto com o uso dos recursos do Hibernate.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378775/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378775/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 18:09:37]]> GMT</pubDate>
				<author><![CDATA[ andre_salvati]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Sergio, não é um erro você utilizar herança caso o controle do código esta em sua mão. O perigo é quando você tem uma grande equipe e decide usar componentes com base em sua implementação e o resto do desenvolvimento necessita herdar de seu componente sem a garantia que a implementação dos métodos ganhos lhe satisfazem<br /> <br /> O repositório é específico da regra do domínio, assim como sua persistência. <br /> Não existe garantia que o RepositórioUsuario utilize o mesmo DAO para persistência que o RepositórioFornecedor (isso pq sabemos da famosa afirmação, Repository é negócio, DAO é serviço de persistência). Ao afirmar que os DAOs podem ser diferentes, não  apenas afirmo que um pode usar JDBC e outro JPA, mas principalmente que um pode persistir no Servidor X Oracle e outro no servidor Y MySql. Herdar a forma de que um repositório faz acesso a dados é engessar a abstração Repository (a não ser que você tenha garantias da forma de persitencia, incluindo a localização física). <br /> <br /> Então alguém pode dizer: "Simples, sobreescrevo o método CRUD se necessário". Se pensar assim, você tem conhecimento dos detalhes da implementação da classe pai (caso contrário você não teria métrica para tomar tal decisão). Obrigar este tipo de conhecimento, é justamente o que condena os links que postei.<br /> <br /> Outra situação é de que um userRepository.store() pode fazer muitas outras coisas do que simplesmente invocar um dao.save. Aqui tbm poderia ser dado overhide e depois invocado um super.store, contudo qual é a garantia que o método store do "pai" não anule as alterações do filho?<br /> <br /> <br /> No exemplo que você postou, eu não utilizo   "Repository generico = new GenericRepository(); " nos Repositories como objeto composto, e sim a interface DAO como atributo. Isso permite que injete diferentes DAOs dependendo que Repository estou e garanta a forma como vou acessar os dados.<br /> <br /> [quote=sergiotaborda] Usar Strategy não é composição, é Strategy.[/quote]<br /> <br /> E como eu não posso utilizar de composição + interface para implementar Strategy?<br /> <a class="snap_shots" href="http://en.wikipedia.org/wiki/Strategy_pattern" target="_blank" rel="nofollow">http://en.wikipedia.org/wiki/Strategy_pattern</a><br /> <br /> Utilizo Strategy para resolver meu acesso a dados do repository. O repositorio não sabe como fazer isso, quem sabe é seu atributo DAO (que é a interface "estratégica").<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378778/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378778/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 18:25:10]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Ah, claro, lembre-se tbm que você não deve ter um repository para cada Entidade, e sim apenas para Agreggate roots. Sendo assim o repositório tem que fazer CRUD tbm nos agregados. Neste caso a herança tbm não ajudaria.<br /> <br /> Quando eu mencionei que tinha respondido em 4 mensagens anteriores, com o uso de composição, não queria dizer que escrevi algo genérico, pq em minha opinião isso não casa com tudo que estamos discutindo com o que o Repository deve prover. Apenas descrevi a maneira de desacoplar o dao do repository.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378780/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378780/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 18:36:58]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]Olá Rodrigo ...<br /> <br /> Agora uma Service, é um padrão que encapsula seu Domain MOdel. Ele antecede as Entidades e controla o fluxo das execuções. O comportamento da entidade (seus métodos de negócio) possui lógica, um service apenas opera como uma fachada. Sendo assim, uma entidade não deve invocar um service, e sim ser invocada por um.<br /> <br /> [/quote]<br /> <br /> <br /> Lezinho, não confunda o Service Layer do Fowler com o Service do Evans. É uma confusão bem comum. O Service do Evans é um elemento do domínio que encapsula comportamentos que você não consegue alocar naturalmente a um entity. O Evans chama Service Layer de Application Layer (não sei porque esses caras são tão amigos e não usam a mesma terminologia). Service != Façade.<br /> <br /> Eu injeto Services nos Entities para encapsular processamentos complexos ou que podem variar (Strategy).<br /> <br /> <br /> <br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378785/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378785/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 19:42:55]]> GMT</pubDate>
				<author><![CDATA[ rodrigoy]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]Sergio, não é um erro você utilizar herança caso o controle do código esta em sua mão. O perigo é quando você tem uma grande equipe e decide usar componentes com base em sua implementação e o resto do desenvolvimento necessita herdar de seu componente sem a garantia que a implementação dos métodos ganhos lhe satisfazem<br /> [/quote]<br /> <br /> Isso pode até ser verdade. Mas se tivesse medo disso não usaria as classes abstractas do java.<br /> Ou as classes abstractas são bem implementadas ou não são. Cabe a quem as faz prover que sejam boas.<br /> <br /> O que eu não entendi é o codigo que vc propõe que se use se não quisermos usar herança. Vamos pensar por um momento que é proibido usar herança. Então, como é que, com composição, resolveriamos o problema proposto de não reescrever métodos CRUD [u]simples[/u]? Ou vc acha que tais métodos não existem ? Que todos os métodos do Repositorio são complexos por tratarem de agregados ? Vc mesmo me lembrou que nem todos os entitty são agregados complexos...<br /> <br /> Parece que é ha uma dicotomia: por um lado vc aceita que existem entities simples o suficiente que não precisam de repository. Por outro vc aceita que o cliente de um dao deve sempre ser um repository.<br /> Ora, se para comunica com o dao preciso sempre de um repository, então preciso de um mesmo quando o codigo é simples o suficiente para ser igual para todas as entidades. Não ?<br /> Agora vc me diz que nem todas as entities tem repository... bem, vc tem que escolher. Afinal como é?<br /> <br /> Tudo bem que vc pode querer dao de locais fisicos diferentes, mas ai vc simplesmente parametiza a fabrica.<br /> Nada disso impede que o algoritmo que procura e seta o dao do repositorio seja comum a todos os repositorios. Tb nada impede que existam métodos simples no repositorio que eu herde e reimplemente quando precisar. <br /> <br /> Se formos levar esta arquitectura às ultimas consequencias rápidamente vc descobre que vc vai precisar de um registro de repositorios, porque essa é a forma correta de declarar os repositorios de forma independente do codigo que os usa (mesmo quando o registro for implicito). No outro extremo vc vai descobrir que se usar um dao do tipo hibernate e todas as entidades forem simples, então vc vai precisar de apenas 1 repositorio generico que delega tudo para 1 dao.  E isso automática transforma o " 1 repositorio + 1 dao hibernate " num anti-pattern.<br /> <br /> Eu só tentei apresentar um solução para o colega de como reaproveitar os métodos. Vc levantou a questão de usar composição em vez de herança. Como é que composição resolve o problema de não ter que reescrever os métodos ? Foi isso que não entendi.  <br /> <br /> Eu até entendi que "composição" se referia a usar os DAO/Strategy , mas não entendo o que isso tem a haver com herança da classe repositorio. <br /> <br /> [quote]<br /> Então alguém pode dizer: "Simples, sobreescrevo o método CRUD se necessário". Se pensar assim, você tem conhecimento dos detalhes da implementação da classe pai (caso contrário você não teria métrica para tomar tal decisão). Obrigar este tipo de conhecimento, é justamente o que condena os links que postei.<br /> [/quote]<br /> <br /> Não é necessáriamente verdade. Desde que a super classe esteja bem documentada é perfeitamente natural usá-la. Vai-me dizer que nunca usou AbstractAction do swing ?  ou AbstractTableModel ? Então! classes abstractas são boas. Acho que é bastante simples um contrato que usa um default e vc é livre de redefinir o default quando quiser. E reimplementar store() parece-me bastante intuitivo se vc quiser alterar o algoritmo que guarda o objeto. <br /> Agora vc vai argumentar que o DAO é uma coisa interna do repositorio e portanto teria que saber que o repositorio tem um dao para que ao reimplementar store() o possa usar. Ora, isso é bem simples de conseguir. Faça o dao ser privado e crie um metodo protegido para o acessar. Desta forma classes da hierarquia têm toda a informação que precisam e classes clientes nem sonham que existe um dao. <br /> Enfim, se vc quiser fazer bem feito e sem esse temor sobre como o próximo vai reimplementar sua classe abstrata, ha como fazer.<br />   <br /> [quote]<br /> Outra situação é de que um userRepository.store() pode fazer muitas outras coisas do que simplesmente invocar um dao.save. Aqui tbm poderia ser dado overhide e depois invocado um super.store, contudo qual é a garantia que o método store do "pai" não anule as alterações do filho?<br /> [/quote]<br /> <br /> Vc está partindo do pressuposto errado de que se  chamaria super.store(). Se o seu objetivo é redefinir o algoritmo, não ha porque usar o algoritmo velho dentro do novo. Não faz sentido, até porque vc não sabe qual era o velho.<br /> <br /> [quote]<br /> No exemplo que você postou, eu não utilizo   "Repository generico = new GenericRepository(); " nos Repositories como objeto composto, e sim a interface DAO como atributo. <br /> [/quote]<br /> <br /> Eu sei. Eu entendi isso. O que não consigo ver é onde isso substitui herança.<br /> (veja que usei o DAO dentro do GenericRepository)<br /> <br /> [quote]<br /> [quote=sergiotaborda] Usar Strategy não é composição, é Strategy.[/quote]<br /> <br /> E como eu não posso utilizar de composição + interface para implementar Strategy?<br /> <a class="snap_shots" href="http://en.wikipedia.org/wiki/Strategy_pattern" target="_blank" rel="nofollow">http://en.wikipedia.org/wiki/Strategy_pattern</a><br /> <br /> [/quote]<br /> [/quote]<br /> <br /> Releia os links que passou antes. O dilema não é entre herdar ou compor. O dilema é saber usar as diretivas É-UM e TEM-UM corretamente. Quando vc usa strategy, vc claramente sabe que a classe não é-uma estratégia, a classe tem-uma estratégia (de entre várias posssiveis). Foi isso que quiz dizer com "strategy não composição"  referindo-me ao facto de ao vc usar DAO como estratégia não está escolhendo entre se o repositorio É-UM DAO ou ele TEM-UM DAO. Vc já escolheu que ele TEM-UM DAO ao escolher o padrão Strategy. Agora, isso, não tem nada a haver com eu poder ou não extender o repositorio. Por isso que eu sigo sem entender o isto tem a ver com herança. Se houve alguma duvida quanto a se um repositorio é-um dao eu entenderia o seu comentário, mas não é o caso. O que estava em causa era os vários tipos de repositorio compatilharem codigo. A composição não é um meio deles fazerem isso... pelos menos não a composição de DAO/Strategy.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378823/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378823/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 23:05:37]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Domain Driven Design Quickly]A  service  is not  about  the object performing <br /> the  service,  but  is  related  to  the  objects  the  operations  are <br /> performed  on/for.  In  this manner,  a Service [b] usually  becomes  a <br /> point of connection for many objects[/b].[/quote]<br /> <br /> rodrigoy, como você pode ver na citação acima, um service do DDD é um ponto de conexão de vários outros objetos, afim de fornecer uma determinada operação. Muita semelhança com o padrão descrito por Fowler, não concorda?<br /> <br /> Quanto a nele conter os objetos de domínio ou os objetos de domínio conter eles:<br /> <br /> [quote=Domain Driven Design Quickly]The operation performed refers to other objects in the domain.[/quote]<br /> <br /> A execução da operação do Service é referenciada para outros objetos no domínio.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378833/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378833/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 19 Oct 2007 23:46:09]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]<br /> [quote=Domain Driven Design Quickly]The operation performed refers to other objects in the domain.[/quote]<br /> <br /> A execução da operação do Service é referenciada para outros objetos no domínio.[/quote]<br /> <br /> A tradução correta seria:<br /> <br /> "A execução da operação do Service [b]refere-se a/aponta para/depende de[/b] outros objetos no domínio."]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378841/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378841/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 20 Oct 2007 01:25:35]]> GMT</pubDate>
				<author><![CDATA[ andre_salvati]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=sergiotaborda]Isso pode até ser verdade. Mas se tivesse medo disso não usaria as classes abstractas do java.<br /> Ou as classes abstractas são bem implementadas ou não são. Cabe a quem as faz prover que sejam boas. [/quote]<br /> <br /> A questão não é ser classe abstrata, e sim as funcionalidades herdadas e seu uso.  A própria classe Repository do seu pseudo-código não tem característica de classe abstrata, é uma classe convencional, que [b]não exige[/b]  nenhum método a ser implementado pela classe filha.<br /> <br /> É válido uso de classes abstratas quando seus filhos assumem como "seus", os métodos implementados do pai, apenas especializando os métodos abstratos que justificam a existencia de "N"classes filhas. As classes filhas não sobreescrevem os métodos do pai, pois pela modelagem é assumida tal coesão. <br /> <br /> No seu exemplo não existe tais métodos abstratos logo não se justifica a herança de classe abstrata. As operações de CRUD nos repositórios não recebem necessariamente o mesmo tratamento (não existe conceituamente esta garantia) , logo isso tbm desmotiva o uso da Herança para os repositórios.<br /> <br /> [quote=sergiotaborda]reimplementar store() parece-me bastante intuitivo se vc quiser alterar o algoritmo que guarda o objeto[/quote]<br /> <br /> Parece intuitivo pra você que criou o método. E se o store da classe pai escreve em log a operação e dispara um email além de persistir? Você acabou de perder funcionalidades. Herdar e sobreescrever quebra  o encapsulamento, pois você [b]tem[/b] que conhecer os detalhes da implementação do pai. <br /> <br /> [quote=sergiotaborda]O que eu não entendi é o codigo que vc propõe que se use se não quisermos usar herança.[/quote]<br /> <br /> Para evitar herança se usa composição (quando a herança não se qualifica como um subtipo). Herança não serve para deixar de digitar código, serve para qualificar um subtipo. Não existe um objeto de negócio "Repository" com CRUDs na definição de negócio, e sim CustomerRepository, ProductRepository e etc, isso é, a não ser que de fato Repository fosse abstrata, mas como você definiu, ela é concreta, pelo menos lógicamente. Portanto não faz sentido o ancestral em comum, tbm não faz sentido tais subtipos, pelo menos para os motivos expostos.<br /> <br /> Contudo o q sugeri foi simplesmente desacoplar o DAO, não foi fazer "A Repository Genérica", mesmo em CRUD. Como venho dizendo não vejo sentido nisso. <br /> <br /> [quote=sergiotaborda]Parece que é ha uma dicotomia: por um lado vc aceita que existem entities simples o suficiente que não precisam de repository. Por outro vc aceita que o cliente de um dao deve sempre ser um repository. [/quote]<br /> <br /> Quem disse que não são todas as entidades que precisam de repositories não sou eu, é a literatura:<br /> [quote=Domain Driven design Q.]Provide <br /> repositories  only  for  Aggregate  roots (...)[/quote]<br /> <br /> Os agregados que não possuem Repositories são reportados ao Repository da Entity root do Agreggate. Tal repositório é cliente de um DAO, simples assim. Nesta caso o "benefício" da herança do CRUD pode não ser utilizado.<br /> <br /> <br /> [quote=sergiotaborda]Ou vc acha que tais métodos não existem ? Que todos os métodos do Repositorio são complexos por tratarem de agregados ? Vc mesmo me lembrou que nem todos os entitty são agregados complexos... [/quote]<br />  Nunca disse que [b]todos[/b] os métodos são agregados ou que todos são complexos. Mas só por saber que vão existir agregados e vão existir CRUDs que não vão simplesmente chamar um DAO diretamente (o negócio possibilita isso), ja me faz crer que o possível ancestral comum seria  apenas por conveniência e não por um bom Design, e isso não me agrada.<br /> <br /> [quote=sergiotaborda]Agora vc vai argumentar que o DAO é uma coisa interna do repositorio e portanto teria que saber que o repositorio tem um dao para que ao reimplementar store() o possa usar[/quote]<br /> Pelo contrário, pra mim quem tinha que ter o DAO é o MinhaClasseRepository, pois OutraClasseRepository pode ter um DAO diferente... Uma classe "genérica" com a implementação do DAO toda sua não acho uma boa sugestão. No mínimo isso deveria ser setado pelos filhos, para quem quer utilizar este tipo de arquitetura ...<br /> <br /> [quote=sergiotaborda]Vc está partindo do pressuposto errado de que se chamaria super.store(). Se o seu objetivo é redefinir o algoritmo, não ha porque usar o algoritmo velho dentro do novo. Não faz sentido, até porque vc não sabe qual era o velho. [/quote]<br /> Claro que pode fazer sentido. Você pode apenas somar uma regra, como disparar uma thread de geração de relatório, e continuar com a outra definição do super.store. Mas a questão é se isso seria uma boa idéia. Eu acho que não, mas tem gente que faz (principalmente se usou a herança só por conveniencia).<br /> <br /> [quote=sergiotaborda]<br /> Se formos levar esta arquitectura às ultimas consequencias rápidamente vc descobre que vc vai precisar de um registro de repositorios, porque essa é a forma correta de declarar os repositorios de forma independente do codigo que os usa (mesmo quando o registro for implicito).[/quote]<br /> <br /> Que exagero... eu só usaria Regyster se hoje em dia ainda não existisse tantos frameworks com D.I.P.<br /> <br /> [quote=sergiotaborda]O que estava em causa era os vários tipos de repositorio compatilharem codigo. A composição não é um meio deles fazerem isso... pelos menos não a composição de DAO/Strategy[/quote]<br /> <br /> Estamos de fato discutindo coisas diferente. Meus posts foram em relação a pergunta "Como desacoplar o DAO?". Justamente pq  acho uma péssima idéia os Repositórios compartilharem CRUD... (ja disse, operações do repositório são operações de negócio,  não existe garantia que todos os CRUDs deverão ter o mesmo comportamento de negócio).<br /> <br /> Mas tá, nada disso é regra e ninguém vai chegar a lugar algum, gosto é gosto. Particularmente, eu não aprovo Herança por conveniência, não acho uma boa prática. <br /> <br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378842/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378842/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 20 Oct 2007 01:37:52]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Taz]A execução da operação do Service refere-se a/aponta para/depende de outros objetos no domínio[/quote]<br /> <br /> Apenas transcrevi a idéia ... no caso use então:<br /> A execução da operação do Service aponta para outros objetos no domínio(...) dá na mesma.<br /> Em DDD Service continua sendo um workflow para os objetos de negócio.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/378844/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/378844/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 20 Oct 2007 01:43:28]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho][quote=Domain Driven Design Quickly]A  service  is not  about  the object performing <br /> the  service,  but  is  related  to  the  objects  the  operations  are <br /> performed  on/for.  In  this manner,  a Service [b] usually  becomes  a <br /> point of connection for many objects[/b].[/quote]<br /> <br /> rodrigoy, como você pode ver na citação acima, um service do DDD é um ponto de conexão de vários outros objetos, afim de fornecer uma determinada operação. Muita semelhança com o padrão descrito por Fowler, não concorda?<br /> <br /> Quanto a nele conter os objetos de domínio ou os objetos de domínio conter eles:<br /> <br /> [quote=Domain Driven Design Quickly]The operation performed refers to other objects in the domain.[/quote]<br /> <br /> A execução da operação do Service é referenciada para outros objetos no domínio.[/quote]<br /> <br /> O que Fowler descreve não é um padrão, mas uma camada... No DDD, services são conceitos do domínio, assim como repositórios e entities.<br /> <br /> [url=http://martinfowler.com/eaaCatalog/serviceLayer.html]Services Layer[/url] (também conhecido como Application Layer) não deve ter regras de negócio (apesar de que do ponto de vista do cliente é indiferente). O papel do services como camada é a coordenação de fluxos e responder às solicitações, eventualmente entrando na camada de domínio.<br /> <br /> Ou seja, de semelhante só tem o nome.. Por isso prefiro o termo Application Layer.<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/379938/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/379938/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 23 Oct 2007 10:45:02]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=cmoscoso ]"O que Fowler descreve não é um padrão, mas uma camada..."[/quote]<br /> <br /> Se não é um padrão, então tente dizer isso a Randy Sttaford, que descreve  no POAA a literal diferença entre o "PATTERN" Session Façade e o "PATTERN" Service Layer, exatamente com estas palavras. Neste mesmo capítulo é mencionada a Application Layer, tendo como a ServiceLayer uma ponte entre esta (AppLayer) e a modelo de domínio.<br /> <br /> O Domain Driven Design diz que:<br /> "A Service  usually  becomes  a point of connection for many objects"<br /> ... exatamente como um objeto da ServiceLayer, onde que não tendo lógica de negócio, delega essa aos objetos do domínio.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/379993/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/379993/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 23 Oct 2007 11:41:43]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho][quote=cmoscoso ]"O que Fowler descreve não é um padrão, mas uma camada..."[/quote]<br /> <br /> Se não é um padrão, então tente dizer isso a Randy Sttaford, que descreve a no POAA a literal diferença entre o "PATTERN" Session Façade e o "PATTERN" Service Layer, exatamente com estas palavras. Neste mesmo capítulo é mencionada a Application Layer, tendo como a ServiceLayer a ponte entre esta e a modelo de domínio.[/quote]<br /> <br /> Você quer dizer então que Application Layer é a Client Layer? Sério, não entendo sua interpretação de Application Layer.<br /> <br /> No link da minha resposta anterior tem uma citação desse cara sobre Services Layer: "Defines an [b]application's boundary[/b] with a layer of services that establishes a set of available operations and coordinates the application's response in each operation."<br /> <br /> [quote=Lezinho]O Domain Driven Design diz que:<br /> "A Service  usually  becomes  a point of connection for many objects"<br /> ... exatamente como um objeto da ServiceLayer, onde que não tendo lógica de negócio, delega essa aos objetos do domínio.[/quote]<br /> <br /> Uma definição mais clara seria: Um Service (DDD) é um ponto de conexão para vários objetos (de domínio) que compartilham de uma mesma regra de negócio. Observe que não saímos do domain layer aqui.<br /> <br /> A diferença fica evidente se dissermos que um Service (DDD) poderia ser chamado da Service/Applcation Layer, mas o contrário não deveria ser permitido se você considerar uma premissa básica da separação em camadas: Dependência apenas de camadas abaixo.<br /> <br /> Services e Repositorios pertecem ao domínio<br /> Service/Application Layer NÃO pertece ao domínio (apesar de fazer uso do mesmo)<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/380141/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/380141/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 23 Oct 2007 13:40:26]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ "Client Layer"?<br /> <br /> Client Layer é qualquer camada que faça uso de outra camada, ou seja, uma camada cliente da outra... isto sim não é Padrão. Praticamente todos diagramas DDD envolve "Client"s que representam tais camadas.<br /> <br /> Um repositório pode ser client de um DAo, uma Entity pode ser cliente de um VO, um Aggregate pode ser client de um Entity ...<br /> <br /> "Camada de aplicação" é aquela relevante ao contexto da aplicação (ManagedBeans, Actions) ou aquelas que server como uma Supercamada para a de Serviços, oferecendo suporte como de email, ftp, etc (de nada tem haver com o negócio). <br /> No livro de Fowler você vê Service direcionados ao negócio, que faz o workflow aos entities e VOs, e aqueles definidos como seu supertipo para suporte a serviços da aplicação.<br /> <br /> Na própia citação que você coloca, é definido o Service como uma fronteira entre a aplicação e o Domínio.<br /> <br /> No DDD isso não muda, podendo existir tanto Service voltado a negócio como para Aplicação:<br /> <br /> [quote=Domain Driven Design]"While  using  Services,  is  important  to  keep  the  domain  layer <br /> isolated.  It  is  easy  to  get  confused  between  services  which <br /> belong  to  the  domain  layer,  and  those  belonging  to  the <br /> infrastructure. [b]There can also be services in the application layer<br /> which adds a supplementary level of complexity.[/b]"[/quote]<br /> <br /> O texto em negrito do DDD é praticamente o mesmo do PoEAA.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/380158/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/380158/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 23 Oct 2007 14:01:21]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]"Client Layer"?<br /> <br /> Client Layer é qualquer camada que faça uso de outra camada...[/quote]<br /> <br /> Quem disse o contrário?<br /> <br /> [quote=Lezinho]Um repositório pode ser client de um DAo, uma Entity pode ser cliente de um VO, um Aggregate pode ser client de um Entity ...[/quote]<br /> <br /> Estamos falando de camadas; repositório não é camada, entity não é camada, aggregate não é camada.. Isso sim é padrão  <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"> <br /> <br /> [quote=Lezinho]"Camada de aplicação" é aquela relevante ao contexto da aplicação (ManagedBeans, Actions) ou aquelas que server como uma Supercamada para a de Serviços, oferecendo suporte como de email, ftp, etc (de nada tem haver com o negócio).[/quote]<br /> <br /> Aqui deu a entender que seus Actions poderiam estar na camada de aplicação. O que não é o caso certo?<br /> <br /> [quote=Lezinho][quote=Domain Driven Design]"While  using  Services,  is  important  to  keep  the  domain  layer <br /> isolated.  It  is  easy  to  get  confused  between  services  which <br /> belong  to  the  domain  layer,  and  those  belonging  to  the <br /> infrastructure. [b]There can also be services in the application layer<br /> which adds a supplementary level of complexity.[/b]"[/quote][/quote]<br /> <br /> Quem está dizendo que os Services são os mesmos é você. Agora já temos 3 services. Sua citação confirma que Services do DDD não é o Service Layer. Ou seja, nada impede que tenhamos entities chamando repositorioes ou entities chamando services ja que estamos falando estritamente de services "which belong  to  the  domain  layer".<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/380237/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/380237/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 23 Oct 2007 15:20:06]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Eu já estou achando a discussão confusa demais para entender mas só um pontinho:<br /> <br /> [quote=cmoscoso]<br /> Estamos falando de camadas; repositório não é camada, entity não é camada, aggregate não é camada.. Isso sim é padrão  <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"> <br /> [/quote]<br /> <br /> [url=http://www.amazon.com/Pattern-Oriented-Software-Architecture-System-Patterns/dp/0471958697]Camadas (Layers) é um padrão sim[/url]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/380289/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/380289/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 23 Oct 2007 16:25:35]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=pcalcado]Camadas (Layers) é um padrão sim[/quote]<br /> <br /> Eu quis dizer que fowler não define Service Layer como um padrão de domain model (ou um "building block" como Evans define seus padrões)<br /> <br /> Services de DDD pertencem ao domínio do problema e por isso podem existir entities que dependam de tais Services.<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/380322/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/380322/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 23 Oct 2007 17:02:51]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Aiaiai ...<br /> <br /> Services são Services. Existem de aplicação e de negócio, não sei onde esta a complicação disso. Tanto o DDD quanto o PoEAA comentam dos dois.<br /> <br /> De fato Phillip, a discussão era de Manga e já estamos falando de Banana.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/380333/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/380333/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 23 Oct 2007 17:25:45]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Lezinho]Aiaiai ...<br /> <br /> Services são Services. Existem de aplicação e de negócio, não sei onde esta a complicação disso. Tanto o DDD quanto o PoEAA comentam dos dois.<br /> <br /> De fato Phillip, a discussão era de Manga e já estamos falando de Banana.[/quote]<br /> <br /> Desnecessário seus gemidos... Inclusive, é lamentável a atitude de desdém das pessoas quando questionadas quanto a sua interpretação sobre os textos mencionados.<br /> <br /> Você não percebe mas a complicação está no fato de você não conseguir explicar com clareza a diferença entre a camada Service e Application. Talvez porque não haja. Você cita duas fontes que definem a mesma coisa com 2 nomes, reconhecidamente um conflito na nomenclatura atual senão, vamos lá, precisamos ter claro as responsabilidades de cada camada, mas esse não parece ser o caso, pelo contraráio, você parece ignorar princípios importantes como YAGNI e KISS e se justifica colando citações sem contexto do seu autor preferido.<br /> <br /> Talvez o tamanho dessa thread tenha feito você perder o foco mas eu vou tentar ser ainda mais claro:<br /> [b]Eu considero as camadas Service e Application como a mesma e não sinto falta de outra camada.[/b]<br /> <br /> Pense que existem pessoas que estão interessadas em comecar a aplicar práticas mais modernas para o seu projeto de software OO e precisam competir com as tais arquiteturas de "referência" estabelecidas. Eu não vejo como essa camada adicional pode ajudar essas pessoas a melhor organizar sua arquitetura usando apenas o seu argumento de que tem que ser assim porque o mestre mandou.<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/380554/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/380554/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Wed, 24 Oct 2007 09:36:33]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Bom, deixando suas observações pessoais de canto (pq em meu pé quem pega é a minha namorada), vamos lá:<br /> <br /> [quote=cmoscoso]Você não percebe mas a complicação está no fato de você não conseguir explicar com clareza a diferença entre a camada Service e Application. Talvez porque não haja[/quote]<br /> <br /> Talvez [b]VOCÊ[/b] não percebeu que não sou eu que menciona sobre as diferenças, mas sim os próprios autores, como no texto que citei no post anterior. Aliás vale repetir a citação:<br /> <br /> [quote=Domain Driven Design]<br /> "While using Services, is important to keep the domain layer<br /> isolated. It is easy to get confused between [b]Services[/b] which<br /> belong to the [b]domain layer[/b], and those belonging to the<br /> [b]infrastructure[/b]. There can also be [b]Services in the application layer[/b]<br /> which adds a supplementary level of complexity."<br /> [/quote]<br /> <br /> ... pra mim esta bem clara e nítida a existência entre Services de infraestrutura, pertencentes a camada de aplicação, e os services pertencentes a camada de domínio, aqueles que se relacionam com um caso de uso. Detalhe, o trecho acima trata de Services no capítulo destinado a Services em um livro de DDD, portanto são Services do DDD. Não há falta de contextualização.<br /> <br /> Com base no trecho acima, olhe no diagrama de classe que Fowler colocou no PoEAA (a qualidade ficou péssima, mas acho que você vai conseguir visualizar as classes), que esta anexada com este post. Lá esta descrito um modelo exatamente como na citação, um service para o negócio e um  para a infraestrutura da aplicação.<br /> <br /> [quote=cmoscoso]<br /> (...) e vc se justifica colando citações sem contexto do seu autor preferido.[/quote]<br /> <br /> Fora do contexto? São trechos totalmente pertinentes a suas colocações, vindas de autores como Martin Fowler, Eric Vans, Floyd Marinescu... Se estas pessoas não são boas referências, então realmente estou mal embasado.<br /> <br /> [quote=cmoscoso]<br /> Eu considero as camadas Service e Application como a mesma e não sinto falta de outra camada.<br /> <br /> Pense que existem pessoas que estão interessadas em comecar a aplicar práticas mais modernas para projeto de software OO e precisam competir com as arquiteturas de referência estabelecidas. Eu não vejo como essa camada adicional pode ajudar essas pessoas a melhor organizar sua arquitetura usando apenas o seu argumento de que tem que ser assim porque o mestre mandou. <br /> [/quote]<br /> <br /> Se você não sente falta, não utiliza. Nenhum destes autores citados dizem que você DEVE usar um Service voltado para os serviços de aplicação, ou um como ponte para os objetos de domínio. Você usa conforme sua necessidade. Toda camada é "adicional", você usa se sente necessidade de usá-la.<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/380668/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/380668/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Wed, 24 Oct 2007 11:52:07]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [lugar errado]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/397661/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/397661/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 27 Nov 2007 09:35:18]]> GMT</pubDate>
				<author><![CDATA[ rodrigoy]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=pcalcado]<br /> <br /> Só é bom focarmos que discordar é ótimo. Eu discordo do Fowler bastante em DSLs, por exemplo. O ponto é ter um mínimo de respeito pelos outros e darmos base às nossas discordâncias, seja usando uma bibliografia ou argumentando. ...[/quote]<br /> <br /> Eu coleciono essas discordâncias com autores famosos... não dá pra concordar com tudo. Eu discordo com a visão do Philipe Krunchten sobre Análise e Design. Discordo com a visão do Ambler sobre MDA. Discordo com a visão do Ivar Yacobson sobre as maravilhas de um Use Case ser um Classifier. <br /> <br /> Lezinho, vc tem algum paper sobre essas regras de segurança com o Drools? (creio que vc tenha aplicado isso na sua aplicação SEAM).]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/397664/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/397664/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 27 Nov 2007 09:38:18]]> GMT</pubDate>
				<author><![CDATA[ rodrigoy]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Eu estive com o Krunchten num workshop do SPIN em porto alegre e pesar da fantastca sacada dos pontos de vsta arquiteturais eu discordo bastante dele tambem. Ele nsiste em BDUF sem parar muito para debater.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/398199/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/398199/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 27 Nov 2007 17:40:14]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Aspecto só dever ser utilizado para tratar dos interesses transversais ou sistemicos e não na sua lógica de negócio. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/404308/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/404308/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 7 Dec 2007 06:59:34]]> GMT</pubDate>
				<author><![CDATA[ Cobracan]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Cobracan]Aspecto só dever ser utilizado para tratar dos interesses transversais ou sistemicos e não na sua lógica de negócio. [/quote]<br /> <br /> Por que?<br /> <br /> Uma regra de negócio ode se comportar como aspecto, validações são um exemplo.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/404344/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/404344/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 7 Dec 2007 08:54:32]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Injetar um repositorio ou um service numa entidade é um interesse transversal. Mesmo que não fosse, se uma determinada regra de negócio fosse melhor implemetada com aspectos, na minha opinião, não teria problemas. Desde que exista boas razões para tal.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/404345/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/404345/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 7 Dec 2007 08:55:34]]> GMT</pubDate>
				<author><![CDATA[ rodrigoy]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Acho que a confusão este caso é o que é regra de negócio. Um Domain Model contem regras de negócio mas provavelmente não é o único lugar onde estas ficam. Dificilmente as relações dentro de um domain model seria tratadas com aspectos mas as outras regras isoladas poderiam.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/404351/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/404351/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 7 Dec 2007 09:04:20]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Service Layer (PoEAA) == Application Layer (DDD)</title>
				<description><![CDATA[ [quote]<br /> Talvez porque não haja. <br /> [/quote]<br /> <br /> E realmente não há. <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"><br /> <br /> O proprio Fowler explica em um post no seu bliki, esta confusão (normal) sobre a salada de termos que os autores criam.<br /> <br /> [quote]<br /> Eric Evans's excellent book Domain Driven Design has the following to say about these layers.<br /> <br />     [list]Application Layer [his name for Service Layer][/list]<br />     [list]Domain Layer (or Model Layer)[/list]<br /> <a class="snap_shots" href="http://martinfowler.com/bliki/AnemicDomainModel.html" target="_blank" rel="nofollow">http://martinfowler.com/bliki/AnemicDomainModel.html</a><br /> <br /> [/quote]<br /> <br /> Vejam que ele precisa explicar isso, porque esta falta de entendimento que causa o "Anemic Domain Model". Vejam: é normal existir esta confusão.<br /> <br /> E a explicação pra isso é a mais clara possível: pessoas agem e pensam de formas diferentes. E dão "nome aos bois" de formas diferentes. E autores são pessoas!<br /> <br /> Estas pessoas (Fowler, Evans, Booch, Rockford Lotha, etc..) tem idéias/soluções e as publicam em formas de livros e artigos. E sempre encontram os que concordam e discordam.<br /> <br /> Eles não formam um grupo para debater e formalizar estas idéias/soluções e nomes. E mesmo assim elas são compartilhadas.<br /> <br /> Estas idéias/soluções existem para nos ajudar, "iluminar nosso caminho", mas normalmente cada uma delas foi concebida em um "caminho" distinto. Não devemos tomar como verdade ou como padrão o que um ou outro autor apresenta sem definir o contexto, o caminho que *nós* estamos pisando. <br /> <br /> A propósito, a diferença entre uma solução e uma idéia seria um bom assunto pra outro post. Normalmente soluções nos ajudam na prática, e idéias quebram paradigmas, ajudam a vender livros e palestras, mas não há garantia de que vão resolver um problema e ainda deixam a cabeça dos arquitetos pegando fogo! (DSL?).<br /> <br /> * (Como toda regra tem uma exceção, o Manifesto Ágil partiu de uma reunião entre os autores)<br /> <br /> PS.: Este é meu primeiro post. Espero poder contribuir e aprender muito por aqui.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/404614/service-layer-poeaa--application-layer-ddd
</guid>
				<link>http://www.guj.com.br/prepost/70275/404614/service-layer-poeaa--application-layer-ddd
</link>
				<pubDate><![CDATA[Fri, 7 Dec 2007 12:17:48]]> GMT</pubDate>
				<author><![CDATA[ wanderson.santos]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=pcalcado][quote=Cobracan]Aspecto só dever ser utilizado para tratar dos interesses transversais ou sistemicos e não na sua lógica de negócio. [/quote]<br /> <br /> Por que?<br /> <br /> Uma regra de negócio ode se comportar como aspecto, validações são um exemplo.[/quote]<br /> <br /> Aspecto é um assunto bastante interessante, e um bom livro sobre aspecto é Aspectj Programação Orientada a Aspectos com Java, editora Novatec. O aspecto veio para ajudar onde a OO falha, separar os interesses funcionais dos interesses sistêmicos. <br /> "A incapacidade da OO de modularizar os interesses sistêmicos ocasiona os problemas resultantes da descentralização do código:<br />  .Replicação do código;<br />  .Dificuldade de manutenção;<br />  .Redução da capacidade de reutilização de código;<br />  .Aumento da dificuldade de compreensão;" (Diogo Vinícius Winck e Vicente Goetten Jr)<br /> <br /> Entenda funcional como sua lógica de negócios e sistêmicos o restante como exceções.<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405067/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405067/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 8 Dec 2007 11:39:29]]> GMT</pubDate>
				<author><![CDATA[ Cobracan]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Cobracan]<br /> Aspecto é um assunto bastante interessante, e um bom livro sobre aspecto é Aspectj Programação Orientada a Aspectos com Java, editora Novatec. O aspecto veio para ajudar onde a OO falha, separar os interesses funcionais dos interesses sistêmicos. <br /> "A incapacidade da OO de modularizar os interesses sistêmicos ocasiona os problemas resultantes da descentralização do código:<br />  .Replicação do código;<br />  .Dificuldade de manutenção;<br />  .Redução da capacidade de reutilização de código;<br />  .Aumento da dificuldade de compreensão;" (Diogo Vinícius Winck e Vicente Goetten Jr)<br /> <br /> Entenda funcional como sua lógica de negócios e sistêmicos o restante como exceções.<br /> <br /> [/quote]<br /> <br /> Você não me respondeu. Porque eu  não posso tratar minhas regras de negócos como aspectos?<br /> <br /> Eu não li este livro mas acredito que possa ter passado alguma confusão. [b]AOP diz como implementar os conceitos mas não diz quais são[/b] (tanto que os exemplos sempre recaem nos mesmos de sempre: log, segurança, transação), regras de negócio podem ser implementadas como conceitos ortogonais se for interessante. Um exemplo que já citei é validação, outro é segurança. Ambos geralmente são regras de negócio e não uma necessidade não-funcional (o que você chamou de 'sistemico'). Recomendo que leia o livro de 	Ramnivas Laddad , AspecJ in Action. Não sei se tem em português.<br /> <br /> [url=http://www-128.ibm.com/developerworks/java/library/j-aopwork15/]Um artigo do autor cita[/url]:<br /> <br /> [quote]At the system level, security, transaction management, and thread-safety concerns are commonly implemented using AOP. Many business logic problems (also known as domain-specific concerns) also exhibit crosscutting concerns upon close examination and lend themselves to modularization using aspects. On the other side, units such as classes and packages show code tangling and code scattering at a smaller scale (what I call local or micro crosscutting concerns). Aspect-oriented refactoring can help resolve these kinds of concerns by using aspects to improve the code structure. (See Resources to learn more about aspect-oriented refactoring techniques.)<br /> [/quote]<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405069/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405069/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 8 Dec 2007 12:01:19]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=pcalcado][quote=Cobracan]<br /> Aspecto é um assunto bastante interessante, e um bom livro sobre aspecto é Aspectj Programação Orientada a Aspectos com Java, editora Novatec. O aspecto veio para ajudar onde a OO falha, separar os interesses funcionais dos interesses sistêmicos. <br /> "A incapacidade da OO de modularizar os interesses sistêmicos ocasiona os problemas resultantes da descentralização do código:<br />  .Replicação do código;<br />  .Dificuldade de manutenção;<br />  .Redução da capacidade de reutilização de código;<br />  .Aumento da dificuldade de compreensão;" (Diogo Vinícius Winck e Vicente Goetten Jr)<br /> <br /> Entenda funcional como sua lógica de negócios e sistêmicos o restante como exceções.<br /> <br /> [/quote]<br /> <br /> Você não me respondeu. Porque eu  não posso tratar minhas regras de negócos como aspectos?<br /> <br /> Eu não li este livro mas acredito que possa ter passado alguma confusão. [b]AOP diz como implementar os conceitos mas não diz quais são[/b] (tanto que os exemplos sempre recaem nos mesmos de sempre: log, segurança, transação), regras de negócio podem ser implementadas como conceitos ortogonais se for interessante. Um exemplo que já citei é validação, outro é segurança. Ambos geralmente são regras de negócio e não uma necessidade não-funcional (o que você chamou de 'sistemico'). Recomendo que leia o livro de 	Ramnivas Laddad , AspecJ in Action. Não sei se tem em português.<br /> <br /> [url=http://www-128.ibm.com/developerworks/java/library/j-aopwork15/]Um artigo do autor cita[/url]:<br /> <br /> [quote]At the system level, security, transaction management, and thread-safety concerns are commonly implemented using AOP. Many business logic problems (also known as domain-specific concerns) also exhibit crosscutting concerns upon close examination and lend themselves to modularization using aspects. On the other side, units such as classes and packages show code tangling and code scattering at a smaller scale (what I call local or micro crosscutting concerns). Aspect-oriented refactoring can help resolve these kinds of concerns by using aspects to improve the code structure. (See Resources to learn more about aspect-oriented refactoring techniques.)<br /> [/quote]<br /> <br /> [/quote]<br /> <br /> A questão em sí  é que aspecto veio para completar a OO, onde a OO falha ou deixa a desejar. Você pode usar aspectos para sua lógica de negócio mas me parece muito estranho um SOO usar aspecto em sua camada de negócios e particularmente tenho minhas dúvidas. Esse assunto é muito interessante e polêmico. Não sou um especialista para afirmar o que deve ser ou não, mas a minha opinião  é que devemos separar as responsabilidades. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405227/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405227/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 9 Dec 2007 15:18:05]]> GMT</pubDate>
				<author><![CDATA[ Cobracan]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ IMHO, colocar aspectos referente a negócios é meio estranho, não que seja errado, mas estranho. A validações por exemplo ficariam melhores usando o padrão Specification, que é uma forma elegante de executar as validações dentro do domain.<br /> <br /> Acho aspectos muito bem vindo quando o assunto é injeção de dependências. Um bom exemplo é o @Configurable do spring, ou melhor ainda, inventar uma macumba para seu domain não depender de container de DI nenhum, e isso é possível com AOP.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405247/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405247/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 9 Dec 2007 16:49:46]]> GMT</pubDate>
				<author><![CDATA[ Thiago Senna]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Thiago Senna]IMHO, colocar aspectos referente a negócios é meio estranho, não que seja errado, mas estranho. A validações por exemplo ficariam melhores usando o padrão Specification, que é uma forma elegante de executar as validações dentro do domain.<br /> [/quote]<br /> <br /> Thiago, Specfication não serve para isso. Specification serve para verificar s um objeto é condizente com um dado critério, não se ele é válido. Você não precisaria de uma spec ara dizer se um triângulo de dois vértices é válido, o objeto deve se verificar. Como todos nós sabemos um problema deste tipo de coisa é que validação geralmente resulta em código duplicado porque você ode querer verificar isso em outros lugares antes de formar o objeto em si.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405272/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405272/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 9 Dec 2007 18:42:32]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=pcalcado]<br /> Thiago, Specfication não serve para isso. Specification serve para verificar s um objeto é condizente com um dado critério, não se ele é válido. Você não precisaria de uma spec ara dizer se um triângulo de dois vértices é válido, o objeto deve se verificar. Como todos nós sabemos um problema deste tipo de coisa é que validação geralmente resulta em código duplicado porque você ode querer verificar isso em outros lugares antes de formar o objeto em si.[/quote]<br /> <br /> Hmmm.. Vc ta falando de validações basicas, tipo aquelas comum em construtores de VOs que procuram por nulls e illegal exceptions. Acho que seria uma boa mesmo,  nem que seja posteriormente com o modelo numa situacao mais estavel com relação a refactoring.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405285/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405285/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 9 Dec 2007 19:21:04]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ VOs? COmo assim?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405292/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405292/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 9 Dec 2007 19:53:18]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Thiago Senna]IMHO, colocar aspectos referente a negócios é meio estranho, não que seja errado, mas estranho. A validações por exemplo ficariam melhores usando o padrão Specification, que é uma forma elegante de executar as validações dentro do domain.<br /> [/quote]<br /> <br /> Sim, o Specification é o padrão para validação, mas AOP pode ser util para manter a consistencia sem grande trabalho. Em vez de vc escrever aquele código chato que verifica se os paramentos são null ou fora de range vc pode simplesmente anotar e deixar alguem fazer o trabalho. Ok, isto é feitos com alguns frameworks de anotations que usam algo anterior ao AOP : bytecode rewrite. Afinal é a capacidade que o java tem de poder alterar o bytecode em runtime que habilite as ferramentas AOP que são apenas uma forma de implementar inceptações do codigo normal. As implementações de AOP são apenas um frameowrk simples de bytecode rewrite. Existem outras formas de bytecode rewrite que alcançam os mesmo objetivos. No fim, tlv seja mais facil usar um framework baseado em anotations para fazer a consistencia dos objetos do que escrever uma monte de cutting concerns repetidos. <br /> <br /> [quote]<br /> Acho aspectos muito bem vindo quando o assunto é injeção de dependências. Um bom exemplo é o @Configurable do spring, ou melhor ainda, inventar uma macumba para seu domain não depender de container de DI nenhum, e isso é possível com AOP.[/quote]<br /> <br /> A injeção é feita pelo mesmo mecanismo de bytecode rewrite. Os frameworks que fazem isso não usam AOP.<br />  E se vc for escrever o seu proprio DI container tb não vai usar AOP. Porque AOP é baseado em bytecode rewrite, então é muito mais eficaz usar bytecode rewrite logo de base.<br /> AOP é bytecode rewrite para regras genericas que os frameworks de butecode não podem antever.E por isso são ideiais para injetar regras de aplicação (log, transação, etc)  ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405298/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405298/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 9 Dec 2007 20:29:22]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Sobre Specification e validação, o q eu penso sobre, num exemplo simples. Validação verifica se tres numeros formam um triangulo (se nenhum é nulo, negativo, valores minimos e máximos), enquanto eu teria uma Specification (que recebe um objeto triangulo) para determinar se o triangulo é um triangulo retangulo.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405327/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405327/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 9 Dec 2007 23:00:16]]> GMT</pubDate>
				<author><![CDATA[ Edufa]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Edufa]Sobre Specification e validação, o q eu penso sobre, num exemplo simples. Validação verifica se tres numeros formam um triangulo (se nenhum é nulo, negativo, valores minimos e máximos), enquanto eu teria uma Specification (que recebe um objeto triangulo) para determinar se o triangulo é um triangulo retangulo.[/quote]<br /> <br /> Especification é para validar um objeto contra um critério relevante ao negócio. Geralmente este conceito é único e não faz sentido ter exposto na forma de um comportamento em si. Dois cenários:<br /> <br /> - Ser um triângulo retêngulo ou não é algo que é usado em vária partes do sistema para coisas diferente: O objetod eve ter uma propriedade que indique se é retângulo ou não, não uma Specification. A Specification não serve para checar oe stado interno do objeto, validação quem faz é o objeto<br /> <br /> - Existe uma situação onde apenas triângulos retângulos são aceitos. Nenhum outro lugar (ou pouquíssimos outros) utilizam esta informação então não vale a pena criar um atributo que informe se o triângulo é retângulo. Neste caso cria-se uma verificação que recebe um triângulo e informa se é um retângulo ou não, se não for ela o rejetia. Esta e a especificação.<br /> <br /> O importante é notar que o objeto é quem se valida. Se você possui um critério para rejeitar ou aceitar objetos de acordo com um critério qualquer pode criar uma especificação apra isso mas não é uma validação. Um objeto pdoe ser válido e não ser aceito por uma especificação.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405350/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405350/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sun, 9 Dec 2007 23:57:00]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ A minha opinião sobre Aspecto é de que só devemos utiliza-lo para os interesses sistêmicos onde o OO falha ou deixa a desejar, como foi dito antes, se utilizarmos Aspectos na camada de negócios então sua aplicação deixa de ser puramente OO. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405385/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405385/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 10 Dec 2007 08:36:55]]> GMT</pubDate>
				<author><![CDATA[ Cobracan]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Cobracan]A minha opinião sobre Aspecto é de que só devemos utiliza-lo para os interesses sistêmicos onde o OO falha ou deixa a desejar, como foi dito antes, se utilizarmos Aspectos na camada de negócios então sua aplicação deixa de ser puramente OO. [/quote]<br /> <br /> Ahm? O que é uma aplicação ser puramente OO?<br /> <br /> Para começar teríamos que ter uma linguagem puramente OO, não? Então já podemos excluir Java. Outra coisa importante seria que tudo no programa fosse jeito com objetos, talvez? Então podemos excluir aspectos ([b]especialmente[/b] os com AspectJ, com Spring AOP, JBoss AOP e essas coisas ainda dá pra engolir). Acredite em mim: [b]você não precisa de e não quer um programa 100% OO[/b].]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405392/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405392/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 10 Dec 2007 08:48:47]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=pcalcado]VOs?[/quote]<br /> <br /> [url=http://domaindrivendesign.org/]DDD[/url]<br /> <br /> [quote=pcalcado]COmo assim?[/quote]<br /> <br /> [code]<br /> public class Intervalo {<br />     ...<br /> <br />     public Intervalo(int inicio, int quantidade) {<br />         this.inicio = inicio;<br />         <br />         if (quantidade &lt; 1) {<br />             throw new IllegalArgumentException(&quot;Quantidade no intervalo deve &quot; + <br />                     &quot;ser maior que zero&quot;);<br />         }<br /> <br />     ...<br /> }<br /> [/code]<br /> <br /> Eu tenho várias validações assim, não só nos Value Object claro, por isso talvez fosse uma boa usar AOP.<br /> <br /> Estou lembrandode um outro tópico que vc falou que linguagens dinâmicas como ruby não precisam de AOP, sei que tem algo a ver com o conceito de open classes, mas nao estou muito por dentro de como isso é implementado.<br /> <br /> A cada dia que passa eu tenho mais vontade de aprofundar nessa linguagem..]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405428/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405428/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 10 Dec 2007 09:49:08]]> GMT</pubDate>
				<author><![CDATA[ cmoscoso]]></author>
			</item>
			<item>
				<title>Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Acho que há uma confusão aqui.<br /> <br /> Value Object é um pattern criado por motivos bizzaros e muito utilizados em arquiteturas antiquadas. Veja referência sobre Value Object para ver a  diferença deste e Pojo.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405446/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405446/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 10 Dec 2007 10:01:14]]> GMT</pubDate>
				<author><![CDATA[ nbluis]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=cmoscoso]<br /> [url=http://domaindrivendesign.org/]DDD[/url]<br /> [/quote]<br /> <br /> Ufa! <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0"><br /> <br /> [quote=cmoscoso]<br /> Eu tenho várias validações assim, não só nos Value Object claro, por isso talvez fosse uma boa usar AOP.<br /> [/quote]<br /> <br /> Essas validações, pode definição ficam nos objetos. Dá uma olhada no que escrevi acima nesse exemplo do triângulo.<br /> <br /> <br /> [quote=cmoscoso]<br /> Estou lembrandode um outro tópico que vc falou que linguagens dinâmicas como ruby não precisam de AOP, sei que tem algo a ver com o conceito de open classes, mas nao estou muito por dentro de como isso é implementado.<br /> <br /> A cada dia que passa eu tenho mais vontade de aprofundar nessa linguagem..[/quote]<br /> <br /> Você pode utilizar o conceito de AOP em linguagens dinâmicas mas não precisa. Um exemplo é o ActiveRecord do Rails, ele identifica que um método no formato find_by_ALGUMACOISA ele intercepta essa chamada e toma as medidas necessárias. Isso é feito com a meta-programação, procure na internet sobre method_missing e seus amigos <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405447/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405447/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 10 Dec 2007 10:01:20]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=nbluis]Acho que há uma confusão aqui.<br /> <br /> Value Object é um pattern criado por motivos bizzaros e muito utilizados em arquiteturas antiquadas. Veja referência sobre Value Object que vai entender a diferença deste e Pojo.[/quote]<br /> <br /> Você está falando sobre Transfer Object, qe antigamente era chamado de Value Object. O Value Object referido neste tópico é outro padrão, vem de Domain Driven Design.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405448/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405448/injecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 10 Dec 2007 10:03:01]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Opa... valeu pelas correções. Deixe-me bolar um exemplo que veio em minha cabeça.<br /> <br /> [code]<br /> public class Infrator {<br /> <br />   String nome;<br />   String idade;<br /> <br />   // getters and setters omitidos ;)<br /> <br /> }<br /> [/code]<br /> <br /> [code]<br /> public class MenorInfratorSpecification {<br /> <br />   public boolean isSatisfiedBy(Infrator infrator) {<br />     return infrator.getIdade() &lt; 18;<br />   }<br /> <br /> }<br /> [/code]<br /> <br /> <br /> [code]<br /> public class FEBEM {<br /> <br />   public void addMenorInfrator(Infrator infrator) {<br />     MenorInfratorSpecification spec = new MenorInfratorSpecification();<br />     if (spec.isSatisfiedBy(infrator)) {<br />       // prende o menor infrator<br />     } else {<br />       throw new RuntimeException("Este infrator não é de menor");<br />     }<br />   }<br /> <br /> }<br /> [/code]<br /> <br /> Este seria um bom exemplo de validação (de regra de negócio) utilizando uma Specification?<br /> <br /> Quanto ao AOP o que vocês defendem é que aspectos seriam interessantes para aquelas validações repetitivas como tamanho de campo, se um atributo é nulo, se uma dada String realmente é um e-mail, por exemplo?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405685/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405685/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 10 Dec 2007 13:42:08]]> GMT</pubDate>
				<author><![CDATA[ Thiago Senna]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Thiago Senna]<br /> Este seria um bom exemplo de validação (de regra de negócio) utilizando uma Specification?<br /> [/quote]<br /> <br /> Pode ser que sim, depende Qual o domínio do seu sistema? Onde os 'menores infratores' são utlizados? O sistema é sobre eles, é sobre infratores em geral? A linha tênue que define se você vai ter uma specification ou simplesmente um isMenorDeIdade()só e definida pelao negócio.<br /> <br /> [quote=Thiago Senna]<br /> Quanto ao AOP o que vocês defendem é que aspectos seriam interessantes para aquelas validações repetitivas como tamanho de campo, se um atributo é nulo, se uma dada String realmente é um e-mail, por exemplo?[/quote]<br /> <br /> É mais amplo que isso: apsectos podem ser utilizados sempre que forem interessantes, não apenas para requisitos não funcionais.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/405995/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/405995/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 10 Dec 2007 19:14:32]]> GMT</pubDate>
				<author><![CDATA[ pcalcado]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=sergiotaborda] E se vc for escrever o seu proprio DI container tb não vai usar AOP. Porque AOP é baseado em bytecode rewrite, então é muito mais eficaz usar bytecode rewrite logo de base. [/quote]<br /> Por exemplo: se opto por utilizar AOP + compile-time weaving (ou mesmo load-time weaving) eu estaria mesmo assim utilizando bytecode rewrite, certo? O AOP entraria apenas como um facilitador de bytecode rewrite? Ou você estaria falando de algo bem mais punk que isso? rsrs..<br /> <br /> [quote=Shoes]Pode ser que sim, depende Qual o domínio do seu sistema? Onde os 'menores infratores' são utlizados? O sistema é sobre eles, é sobre infratores em geral?[/quote]<br /> Pensei em um domínio que atendesse e exemplificasse esta citação que você fez: "Um objeto pdoe ser válido e não ser aceito por uma especificação." Mas compreendi como a solução pode variar dependendo do domínio. Um método isMenorDeIdade() no objeto Infrator poderia ser suficiente ao invés de uma Specification. Aff... é confuso, mas tá valendo.. <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0"><br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/406054/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/406054/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Mon, 10 Dec 2007 23:33:47]]> GMT</pubDate>
				<author><![CDATA[ Thiago Senna]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Thiago Senna][quote=sergiotaborda] E se vc for escrever o seu proprio DI container tb não vai usar AOP. Porque AOP é baseado em bytecode rewrite, então é muito mais eficaz usar bytecode rewrite logo de base. [/quote]<br /> Por exemplo: se opto por utilizar AOP + compile-time weaving (ou mesmo load-time weaving) eu estaria mesmo assim utilizando bytecode rewrite, certo? O AOP entraria apenas como um facilitador de bytecode rewrite? Ou você estaria falando de algo bem mais punk que isso? rsrs..<br /> [/quote]<br /> <br /> Vc pode usar qq tipo de weaving com AOP. Vc estaria usando bytecode rewrite (instrumentatilização acho que se chama) O AOP é um framewordk generico para fazer bytecode rewrite. Com ele vc faz qq coisa que quiser. Interfere em qualquer coisa que quiser. É generico. Por ser generico é bom para regras desconhecidas à priori ou regras cuja definição é uma condição (cut-point) e não uma interface ou coisa simples. Por isso AOP é bom para incluir transações etc.. Agora, se vc sabe à priori onde estão seus cut-points vc não usa AOP, usa um framework de bytecode rewrite (tou lembrando do Javasssit da JBoss ). Aqui vc não precisa se algo generico, precisa de algo eficiente. No fim vai dar ao mesmo, mas é um equilibrio entre ser generico vs eficiente. <br /> <br /> Por exemplo, no JPA todos os objetos @entity têm que ser instrumentalizados para que sejam interceptadas chamadas ao métodos modificadores, para que o estado do objeto passe para dirty. O programador não vê isso.<br /> Quando faz uma query e obtem os objetos , se vc fizer instanceof e comparar com a sua classe de negocio vai retornar true. Mas internamente o drive JPA pode usar outra classe , digamos Persistable para controlar o objeto.<br /> Ele pode fazer isso criando um proxy da classe de negocio : veja bem o proxy herda a classe de negocio e por isso o instanceof funciona. Essa herança é feita com bytecode rewrite. Mas ao mesmo tempo o proxy tb herda de Persistable. Não é só herança "a quente"  é "herança multipla a quente'. bytecode rewrite é tão poderoso quanto isso. Normalmente vc não precisa violar as regras do java , e não o pode fazer em programação normal, mas com bytecode rewrite é o dia a dia.  AOP é uma forma mais evoluida (generica) de construir bytecode rewrite<br /> mas menos eficaz no sentido que ao aumentar a genericidade diminui o poder de transformação oferecido pelo bytecode rewrite.<br /> <br /> Enfim , AOP é um facilitador , mas para coisas simples como interceptar métodos. É ideal para os cuting-concerns . Mas tudo o que é feito com AOP pode ser feito diretamente com bytecode rewrite de forma mais eficaz. Nem tudo o que se faz com bytecode rewrite se pode fazer com AOP , como herança "a quente" por exemplo.<br /> Portanto, num framework vc usa bytecode rewrite. Para implementar uma logica de negocios só sua, vc usa AOP.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/406120/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/406120/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Tue, 11 Dec 2007 08:53:04]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Ressucitando tópico <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0">,<br /> <br /> Mas não é para continuar essa discussão, e sim perguntar ao autor da soluçao:<br /> <br /> Voce conseguiu fazer isso funcionar sem ter que alterar esse aspecto?<br /> <br /> Estou tentando reproduzir aqui e estou obtendo erros, ao menos em meu ambiente de testes.<br /> <br /> A exception diz: No application context active<br /> <br /> Alguma luz ?<br /> <br /> Obrigado]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/600157/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/600157/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 29 Nov 2008 13:31:04]]> GMT</pubDate>
				<author><![CDATA[ GraveDigger]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Em que momento vc tem essa Exception? Quando o Application Server inicia ou quando sua aplicação faz uso efetivo da injeção?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/600202/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/600202/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 29 Nov 2008 17:06:25]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ [quote=Alessandro Lazarotti]Em que momento vc tem essa Exception? Quando o Application Server inicia ou quando sua aplicação faz uso efetivo da injeção?[/quote]<br /> <br /> Oi alessandro,<br /> <br /> Estou fazendo testes com o TestNG + Maven.<br /> <br /> Uso um jboss embedded, isso está acontecendo no momento em que o hibernate sobe, depois de carregar os persistence.xml.<br /> <br /> Eu ACREDITO que esse problema seja pelo fato do Hibernate subir antes do Core do Seam, por isso a inexistência dos contextos.<br /> <br /> Gostaria de alguma forma de deixar o hibernate subir apenas depois do Seam, é possível isso ?<br /> <br /> Que ambiente de testes vc usou para esse caso ?<br /> <br /> Grato]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/600203/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/600203/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 29 Nov 2008 17:08:54]]> GMT</pubDate>
				<author><![CDATA[ GraveDigger]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Vc esta tendo este problema pq no código que exemplifiquei aqui, é utilizado um pointcut em "inicialization".<br /> Quando o persistence.xml levanta o mapeamento das crianças, o aspecto já entra em execução, mas de fato nem o Seam nem os contextos JSFs estão prontos.<br /> <br /> Se você mudar o pointcut para "get" esse problema não ocorre e de quebra terá lazy-load para estes atributos. Ou seja, um atributo anotado pelo mapeamento do AOP, só entrará em ação quando um método invocar este mesmo atributo, assim como os ORMs fazem com seus atributos em Lazy.<br /> <br /> O código ficaria parecido com isso:<br /> <br /> [code]<br /> public aspect InjectEntity{<br /> 	pointcut inject(Object s) :target(s) && (get(@In * br.com.siq.eqm.entity..*.*));<br /> <br /> 	before(Object obj):inject(obj){<br /> <br /> 		try {<br /> <br /> 			String valueOfContextVariable = null;<br /> <br /> 			Boolean createContextVariable=false;			<br /> <br /> 			Field field = obj.getClass().getDeclaredField(thisJoinPoint.getSignature().getName());<br /> <br /> 			field.setAccessible(true);<br /> <br /> 			Object objIn = field.get(obj);<br /> <br /> <br /> 			if(objIn == null){<br /> <br /> 				if(field.isAnnotationPresent(In.class)){<br /> <br /> 					In in = field.getAnnotation(In.class);<br /> <br /> 					if(in.value().equals("")){<br /> <br /> 						valueOfContextVariable = field.getName();<br /> <br /> 					}else{<br /> <br /> 						valueOfContextVariable = in.value();<br /> <br /> 					}	<br /> <br /> 					if(in.create())<br /> <br /> 						createContextVariable = true;<br /> <br /> <br /> 					field.setAccessible(true);<br /> <br /> 					try {<br /> <br /> 							field.set(obj, Component.getInstance(valueOfContextVariable, createContextVariable));<br /> <br /> 					} catch (IllegalStateException e) {<br /> <br /> //TODO fazer aqui seu mecanismo de Log<br /> <br /> 					}catch(Exception e){<br /> <br /> //TODO fazer aqui seu mecanismo de Log<br /> 					}<br /> <br /> 				}<br /> <br /> 			}<br /> 	<br /> <br /> 		} catch (Exception e) {<br /> <br />  //TODO fazer aqui seu mecanismo de Log	<br /> <br /> 			throw new RuntimeException(e);<br /> <br /> 		}				<br /> <br /> 	}	<br /> <br /> <br /> }<br /> [/code]<br /> <br /> []'s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/600216/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/600216/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 29 Nov 2008 18:13:31]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Alessandro,<br /> <br /> Era justamente isso, testei esse novo código e funcionou perfeitamente.<br /> <br /> Muito Obrigado!<br /> <br /> PS: Postei esse tópico no forum do Seam, voce se importa se eu postar esse código lá ?Acredito que tenha mais gente querendo fazer isso.<br /> <br /> []'s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/600217/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/600217/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 29 Nov 2008 18:15:47]]> GMT</pubDate>
				<author><![CDATA[ GraveDigger]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Claro, pode postar sim (com os devidos créditos <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"> )<br /> Como lhe disse em off, estou passando estes códigos para javassist, e fará parte oficial do projeto ou irá para o X-Seam.<br /> []'s]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/600222/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/600222/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Sat, 29 Nov 2008 18:26:15]]> GMT</pubDate>
				<author><![CDATA[ Alessandro Lazarotti]]></author>
			</item>
			<item>
				<title>Re:Injeção de Dependência em Domain Model  (ServiceLayer+DomainModel+Repository)</title>
				<description><![CDATA[ Alessandro... li as primeiras partes do seu post e consegui tirar minha dúvida, que por sinal era a mesma da sua. (é, eu sei que isso aqui é antigo mas sou meio novato no quesito arquitetura).<br /> Agora queria saber de vc como vc tá usando o Repository, por exemplo, são só interfaces ou há classes que possuem acesso a um DAO?<br /> <br /> Aqui no trabalho estamos fazendo os sistemas com base no Spring e precisaremos injetar, em algum momento, o repositório em classes do domínio. Vc conhece o load time weaver do Spring. Seria parecido com o seu aspecto. O que eu queria saber era se seria viável, se eu não perderia performance, essas coisas.<br /> <br /> Por último, queríamos meio que isolar a camada de negócio da parte mais de infraestrutura (acesso aos dados). Então pensamos em criar interfaces "Repository" que seriam implementadas por DAOs. Mas vi aqui que eu não precisaria de um Repository pra cada classe... qual seria a forma de fazer nesse caso?<br /> <br /> Mencionei Alessandro no início mas vale aí pra todo mundo<br /> Valeu]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/70275/717306/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</guid>
				<link>http://www.guj.com.br/prepost/70275/717306/reinjecao-de-dependencia-em-domain-model--servicelayerdomainmodelrepository
</link>
				<pubDate><![CDATA[Fri, 24 Jul 2009 12:19:29]]> GMT</pubDate>
				<author><![CDATA[ Romulinho]]></author>
			</item>
	</channel>
</rss>
