| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2008 08:05:40
|
MrDataFlex
Virtual Machine Man
![[Avatar]](/images/avatar/a2009556541dfee38d822cf642d80b8c.jpg)
Membro desde: 23/03/2007 18:33:34
Mensagens: 569
Offline
|
Usam instanciacao normal?
Usam algum container de DI ? Qual? Poderia ilustrar um exemplo de configuração dessa injeção?
Usam aspectos? Poderiam me passar um exemplo?
Estou com dúvidas nisso! Obrigado!
|
SCJP 5.0 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2008 08:08:29
|
Rodrigo Vieira Pinto
JavaEvangelist
![[Avatar]](/images/avatar/e7e69cdf28f8ce6b69b4e1853ee21bab.jpg)
Membro desde: 15/07/2004 11:05:05
Mensagens: 354
Localização: São Paulo
Offline
|
Normalmente uso uma interface na camada de domínio.
E na camada de persistência uma classe que implementa essa interface.
E, pra que o domínio saiba qual classe que implementa aquela interface, uso DI.
|
"Ser o segundo é ser o primeiro dos perdedores" - Ayrton Senna
"Eu vou dá 10 pau!!" - Aracy de Almeida
Nova dupla sertaneja: Waterfall e Procedural. Pra começar, é sertanejo (ARGH!)
"Bem, dizia eu que a aritmética..." - Prof. Girafales
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2008 08:26:46
|
MrDataFlex
Virtual Machine Man
![[Avatar]](/images/avatar/a2009556541dfee38d822cf642d80b8c.jpg)
Membro desde: 23/03/2007 18:33:34
Mensagens: 569
Offline
|
Rodrigo Vieira Pinto wrote:Normalmente uso uma interface na camada de domínio.
E na camada de persistência uma classe que implementa essa interface.
E, pra que o domínio saiba qual classe que implementa aquela interface, uso DI.
Você quer dizer que usa DI, assim:
|
SCJP 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2008 08:55:08
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
MrDataFlex wrote:Usam instanciacao normal?
Usam algum container de DI ? Qual? Poderia ilustrar um exemplo de configuração dessa injeção?
Usam aspectos? Poderiam me passar um exemplo?
Em tese todos esses métodos são iguais.
Vc precisa definir o repositorio no construtor da classe.
Se vc o passa manualmente ou com injeção é irrelevante para a construção da classe.
O que vc não deve fazer é
e esperar milagres.
Esse código espera que exista um DI e isso fazer suposição. Supor é sempre ruim.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2008 09:02:43
|
MrDataFlex
Virtual Machine Man
![[Avatar]](/images/avatar/a2009556541dfee38d822cf642d80b8c.jpg)
Membro desde: 23/03/2007 18:33:34
Mensagens: 569
Offline
|
sergiotaborda wrote:
MrDataFlex wrote:Usam instanciacao normal?
Usam algum container de DI ? Qual? Poderia ilustrar um exemplo de configuração dessa injeção?
Usam aspectos? Poderiam me passar um exemplo?
Em tese todos esses métodos são iguais.
Vc precisa definir o repositorio no construtor da classe.
Se vc o passa manualmente ou com injeção é irrelevante para a construção da classe.
O que vc não deve fazer é
e esperar milagres.
Esse código espera que exista um DI e isso fazer suposição. Supor é sempre ruim.
Isso significa que há outra camada de uso acima da Person, demosntrada neste exemplo?
Como ficaria a sua utilização ?
Edit: Em outras palavras, de uma maneira de boa prática: quem estaria criando o repositório e passando a Person ?
This message was edited 2 times. Last update was at 16/04/2008 09:10:28
|
SCJP 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2008 09:44:58
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
MrDataFlex wrote:
Isso significa que há outra camada de uso acima da Person, demosntrada neste exemplo?
Como ficaria a sua utilização ?
Edit: Em outras palavras, de uma maneira de boa prática: quem estaria criando o repositório e passando a Person ?
Não existe essa outra camada.
Agora, onde vc precisa inicializar Person ? Vc faria isso no repository/dao usando create() algo como
Assim é fácil. O Repositorio auto injeta-se no person.
Na prática vc nunca pode dar um new em Person directamente. Vc precisa de um outro objeto
para fazer isso. Seja o repositorio/dao , seja um objeto especifico para isso , ou seja via DI
Se vc usar DI então o container irá prover a implementação de PersonRepository para Person quando criar o objeto person. Para isso vc precisa inicializar Person sempre através do container. Algo como (com Guice)
Claro que, assim, não precisa do método create() no repositorio/dao
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2008 10:12:19
|
MrDataFlex
Virtual Machine Man
![[Avatar]](/images/avatar/a2009556541dfee38d822cf642d80b8c.jpg)
Membro desde: 23/03/2007 18:33:34
Mensagens: 569
Offline
|
sergiotaborda wrote:
MrDataFlex wrote:
Isso significa que há outra camada de uso acima da Person, demosntrada neste exemplo?
Como ficaria a sua utilização ?
Edit: Em outras palavras, de uma maneira de boa prática: quem estaria criando o repositório e passando a Person ?
Não existe essa outra camada.
Agora, onde vc precisa inicializar Person ? Vc faria isso no repository/dao usando create() algo como
Assim é fácil. O Repositorio auto injeta-se no person.
Na prática vc nunca pode dar um new em Person directamente. Vc precisa de um outro objeto
para fazer isso. Seja o repositorio/dao , seja um objeto especifico para isso , ou seja via DI
Se vc usar DI então o container irá prover a implementação de PersonRepository para Person quando criar o objeto person. Para isso vc precisa inicializar Person sempre através do container. Algo como (com Guice)
Claro que, assim, não precisa do método create() no repositorio/dao
Valeu amigão, só para finalizar, poderias validar minha arquitetura baseada em DDD, e dizer se está correta ou não?
|
SCJP 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2008 12:01:12
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
MrDataFlex wrote:
Valeu amigão, só para finalizar, poderias validar minha arquitetura baseada em DDD, e dizer se está correta ou não?
Pelo codigo que vc mosrtrou não tem nada errado. Você está usando ActiveRecord com Repositorio mutável e DAO. Eu não usaria active record, mas isso sou eu.
This message was edited 1 time. Last update was at 16/04/2008 12:01:35
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2008 12:21:28
|
MrDataFlex
Virtual Machine Man
![[Avatar]](/images/avatar/a2009556541dfee38d822cf642d80b8c.jpg)
Membro desde: 23/03/2007 18:33:34
Mensagens: 569
Offline
|
sergiotaborda wrote:
MrDataFlex wrote:
Valeu amigão, só para finalizar, poderias validar minha arquitetura baseada em DDD, e dizer se está correta ou não?
Pelo codigo que vc mosrtrou não tem nada errado. Você está usando ActiveRecord com Repositorio mutável e DAO. Eu não usaria active record, mas isso sou eu.
Obrigado pelo esclarecimento, amigo!
Poderia me dizer o que faria você optar por utilizar gerenciadores ao invés de AR ?
|
SCJP 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2008 12:53:56
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
Concordo com o Sergio: pelo construtor fica direto e sem magia negra.
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2008 13:34:50
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
MrDataFlex wrote:
Poderia me dizer o que faria você optar por utilizar gerenciadores ao invés de AR ?
A pergunta seria "O que me faria usar AR". A resposta : nada.
AR não é sério para sistema grandes. Essa é a minha opinião.
Quando vc está gerenciando transações com objetos (padrão WorkUnit) o fato do objeto poder passar por cima disso tudo é muiito ruim. O objeto simplesmente não deve ter essa responsabilidade. Atrapalha.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/04/2008 09:11:20
|
rodrigoy
GUJ Ranger
![[Avatar]](/images/avatar/cf79ae6addba60ad018347359bd144d2.jpg)
Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline
|
Paulo Silveira wrote:Concordo com o Sergio: pelo construtor fica direto e sem magia negra.
Se o objeto está vindo do Contexto Persistente (EntityManager, Hibernate Session) quem injeta?
Só injeto coisas na entidade quando elas são necessárias para as responsabilidades da entidade. Salvar-se não é uma responsabilidade da entidade.
Não faz sentido algum uma entidade precisar se salvar.
|
Rodrigo Yoshima
www.ASPERCOM.com.br
Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro
Débito Técnico Blog: blog.aspercom.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/04/2008 12:02:44
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Uma sugestão bem legal em minha opinião está aqui:
New Improvements in Domain Object Dependency Injection Feature
Não sou fã do @Configurable, mas as outras opções de usar uma interface marcadora ou uma annotation própria para DI me pareceu interessante.
Alguém sabe se é possível fazer algo parecido com o Guice?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/04/2008 12:08:18
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
rodrigoy wrote:
Paulo Silveira wrote:Concordo com o Sergio: pelo construtor fica direto e sem magia negra.
Se o objeto está vindo do Contexto Persistente (EntityManager, Hibernate Session) quem injeta?
Neste caso, imagino que o ideal seria passar o repositório por parâmetro do método da entidade.
Na opinião de vocês é também uma opção válida?
This message was edited 1 time. Last update was at 17/04/2008 12:08:57
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/04/2008 12:16:42
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
rodrigoy wrote:
Paulo Silveira wrote:Concordo com o Sergio: pelo construtor fica direto e sem magia negra.
Se o objeto está vindo do Contexto Persistente (EntityManager, Hibernate Session) quem injeta?
No Hibernate e JPA+Hibernate, que injeta é um interceptor configurado no hibernate.cfg.xml ou programaticamente. Fica bem legal.
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
|
|