Observer em um Resources do vraptor  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
lfcdtv
JavaBaby

Membro desde: 26/05/2009 09:03:56
Mensagens: 88
Offline

Pesoal,

Tenho alguns métodos em um controller que estão fazendo mais de uma coisa e estou querendo refatorá-los para um observer. É um problema bem parecido com a classe GeradorDeNotaFiscal desse post:http://blog.caelum.com.br/tdd-e-sua-influencia-no-acoplamento-e-coesao/

No caso esse controller seria observado e os observadores seriam recebidos no construtor:



No controller também teriam os métodos para adicionar observer e notificação.

Tem outra forma de implementar esse observer no controller ou dessa forma está ok?
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Online

como vc pensa em fazer com que requisições sejam transformadas em observers?

--
Caelum
www.caelum.com.br

lfcdtv
JavaBaby

Membro desde: 26/05/2009 09:03:56
Mensagens: 88
Offline

Os observers só iriam salvar ou atualizar alguns dados no banco.

This message was edited 1 time. Last update was at 25/03/2011 20:23:50

Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Online

pode dar um exemplo mais concreto?

--
Caelum
www.caelum.com.br

lfcdtv
JavaBaby

Membro desde: 26/05/2009 09:03:56
Mensagens: 88
Offline

Imagina um controller parecido com essa classe GeradorDeNotaFiscal:


Agora sap e EnviadorDeEmails seriam Observers:


Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Online

se vc recebe o Sap e o EnviadorDeEmails como dependência, vc não deveria dar new neles:




esse controller é um @Resource?

--
Caelum
www.caelum.com.br

lfcdtv
JavaBaby

Membro desde: 26/05/2009 09:03:56
Mensagens: 88
Offline

É porque em Sap eu teria que receber o controller no construtor.
Algo assim:

Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Online

aí que está, vc não precisa do adicionaObservador, já que vc tá recebendo o Sap no construtor do controller...

o ideal na verdade é vc criar uma interface:


e fazer com que o Sap e o EnviadorDeEmails implementem essa interface. Eles também devem ser anotados com @Component.

Daí vc pode receber no controller uma List<NotaFiscalObserver>:


ou algo do tipo. Assim, se vc precisar adicionar outro observer é só criar uma classe anotada com @Component que implementa NotaFiscalObserver, não precisa modificar o controller.

Lembrando: o Sap e o EnviadorDeEmails não precisam receber o controller!

This message was edited 1 time. Last update was at 25/03/2011 23:05:58


--
Caelum
www.caelum.com.br

Edufa
JavaEvangelist
[Avatar]

Membro desde: 18/04/2006 10:20:03
Mensagens: 315
Localização: Curitiba, PR
Offline

Lucas Cavalcanti wrote:aí que está, vc não precisa do adicionaObservador, já que vc tá recebendo o Sap no construtor do controller...

o ideal na verdade é vc criar uma interface:


e fazer com que o Sap e o EnviadorDeEmails implementem essa interface. Eles também devem ser anotados com @Component.

Daí vc pode receber no controller uma List<NotaFiscalObserver>:



Curiosidade



observers vai receber todos as classes que implementam NotaFiscalObserver ?


Edufa
Curitiba, PR
--
"O estado sou eu". - Luís XIV
"O estado somos nós."- Lênin
"O estado somos eu." - Lula
--
O mundo é deles mas a amazônia é nossa
O petróleo é nosso, mas o gás é deles.
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Online

exato!

isso só funciona automaticamente se vc usa o Spring como DI (se vc está com os jars do spring no WEB-INF/lib), pro Guice tem que fazer uma configuraçãozinha e pro Pico eu não tenho certeza, mas é possível que funcione também.

--
Caelum
www.caelum.com.br

Edufa
JavaEvangelist
[Avatar]

Membro desde: 18/04/2006 10:20:03
Mensagens: 315
Localização: Curitiba, PR
Offline

Isto é muito legal !
poderia ver o q tem de fazer no Guice, atualmente estou usando apenas ele.

[]s

Edufa
Curitiba, PR
--
"O estado sou eu". - Luís XIV
"O estado somos nós."- Lênin
"O estado somos eu." - Lula
--
O mundo é deles mas a amazônia é nossa
O petróleo é nosso, mas o gás é deles.
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Online

no guice vc precisa configurar essa List<...> explicitamente...

tem um jeito relativamente fácil de fazer isso, mas tá protected no VRaptor...

se vc não se importar de usar snapshots, posso gerar um pra vc com essa alteração

--
Caelum
www.caelum.com.br

Edufa
JavaEvangelist
[Avatar]

Membro desde: 18/04/2006 10:20:03
Mensagens: 315
Localização: Curitiba, PR
Offline

eu gostaria sim, se não for incomodo, com o snapshot não posso colocar em produção, mas poderei testar internamente.

[]

Edufa
Curitiba, PR
--
"O estado sou eu". - Luís XIV
"O estado somos nós."- Lênin
"O estado somos eu." - Lula
--
O mundo é deles mas a amazônia é nossa
O petróleo é nosso, mas o gás é deles.
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Online

Testa aí
 Nome do arquivo vraptor-3.3.2-SNAPSHOT.jar [Disk] Download
 Descrição snapshot com o binding List<Classe>
 Tamanho 497 Kbytes
 Baixado:  47 vez(es)


--
Caelum
www.caelum.com.br

Edufa
JavaEvangelist
[Avatar]

Membro desde: 18/04/2006 10:20:03
Mensagens: 315
Localização: Curitiba, PR
Offline

Apareceu um erro estranho



Usando eclipse+maven+jetty7

Arranquei o fragment e voltou a funcionar...

mas não sei se teve a ver a atualização ou algumas mexidas que eu tinha feito no pom

Edufa
Curitiba, PR
--
"O estado sou eu". - Luís XIV
"O estado somos nós."- Lênin
"O estado somos eu." - Lula
--
O mundo é deles mas a amazônia é nossa
O petróleo é nosso, mas o gás é deles.
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team