| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 14:07:49
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Olá a todos!
Primeiramente gostaria de parabenizar aqueles que participaram no CJ. infelizmente não pude ir, mas ano que vem já to lá!
Hoje, vindo para o serviço, fiquei pensando numa arquitetura para lidar de forma diferente com actions no webwork, de forma similiar ao que ao Ruby on Rails.
Hoje tenho minhas actions mais ou menos assim...
Em breve farei uns refactoring nas actions referente ao Ramo de Atividade, e ai, o código vai ficar muito simples, mais ou menos assim:
Mas estive pensando... Minhas actions ficam muito pequenas. É um desperdício de classe na minha opinião. Eu precisarei de no mínimo 5 actions, e mais 1 AbstractAction para conseguir um refactoring que nem esse. Eu vou poluir meu projeto de actions...
O que estou querendo é colocar tudo isso em uma action só. Isso não parece ser problema, pois posso facilmente configurar o xwrok.xml ou simplemente chamar a action utilizando por exemplo a url http://localhost:8080/minhaApp/RamoAtividadeAction!create.do... usando esta chamada o webwork executaria para mim o método create da minha action, e não o execute, que é o default..
Meu código entaum ficaria assim:
Entaum.. a minha dúvida cruel sobre essa arquitetura é quanto a validação. Eu precisava que dependendo do método que fosse executado, fosse usado uma configuração diferente de validação.
Até onde estudei, o webwork tem 3 tipos de validações, e a que mais parece se enquadrar para minha situação é um que vc cria um arquivo com mais ou menos este nome...
NomeDaClasseDaAction-NomeDaAction-validate.xml
Por acaso é esse o tipo de validaçção específica para cada ação da minha action, ou seja, eu teria que criar os seguintes arquivos de validação:
RamoAtividadeAction-inclui-validate.xml
RamoAtividadeAction-altera-validate.xml
RamoAtividadeAction-exclui-validate.xml
(e outros...)
Será que alguém poderia me dar uma luz? Estou querendo fazer isso, mas tenho dúvidas se realmente vale a pena colocar tudo isso na prática!
Abraços!
Thiago Senna
This message was edited 2 times. Last update was at 22/08/2005 14:12:16
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 14:31:22
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Aqui no meu eu faço assim (é Spring MVC):
Esse Action tem acesso a classe que ele deve tratar, a um validador pra essa classe e a um DAO genérico que faz CRUD. Quando ele é chamado pela primeira vez (via GET) ele olha se tem um parâmetro chamado "id" (esse deveria ser configurável, mas não é ), se tiver, ele vai no DAO genérico e manda carregar o objeto com o "id" definido lá, se não tiver, ele instância o objeto.
Nessa hora ele vai e mostra o formulário vazio (ou com os dados do objeto que foi carregado do banco) e quando o usuário dá o submit ele valida o formulario (e retorna se houverem erros) e chama o "save" no DAO genérico. Nesse save, é verificado se o objeto tem um "id" (na verdade, quem verifica é o Hibernate...), se não tiver, é "save" mesmo, se não tiver vira "update".
This message was edited 1 time. Last update was at 22/08/2005 14:34:10
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 14:50:08
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Ah, sobre listar e deletar eu tenho dois Actions que fazem isso, também são configurados via IoC com as informações da classe que eles tem que tratar.
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 14:58:22
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Hehe.. o spring mvc parece ser mais flexível para se adaptar com a nossa imaginação!
Mais pra frente vou ver se aprende Spring MVC, e vou ver de perto como ele funciona.
Infelizmente, o trabalho que estou fazendo, tenho que entregar em outubro. Por isso estou naquela correria (foi por causa desta merda que naum fui no CJ ). Felizmente já sei alguma coisa de webowrk, e só pelo fato de eu saber que é possível implementar tranquilamente aquela gambi q eu postei lá em cima, já fico muito feliz.
No entanto, se eu ficar com a validação acoplada ao meu código não vai valer a pena eu usar estar arquitetura. É melhor eu ficar com o método tradicionar, ou seja, uma classe action para cada possível ação do usuário.
IMHO, essa arquitetura que to querendo implementar só vai ter valor caso os métodos CRUD se mantiverem simples super simples!
Valeu pelo apoio!
This message was edited 1 time. Last update was at 22/08/2005 14:58:55
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 14:58:45
|
Jair Rillo Junior
Moderador
![[Avatar]](/images/avatar/31b3b31a1c2f8a370206f111127c0dbd.jpg)
Membro desde: 29/04/2003 21:19:53
Mensagens: 2524
Localização: São Paulo / Campinas
Offline
|
pelo que eu entendi Thiago, vc quer ter 1 tipo de validação para 1 mesma action, mas esse tipo de validação deve ser diferente dependendo do "parametro" que essa action receber, certo?
Eu particularmente nao sei fazer isso, nem se é possivel, mas seria muito interssante saber se existe alguma maneira.
|
Jair Rillo Junior
http://www.jairrillo.com/blog | Twitter | SCJA, SCJP, SCWCD, SCBCD, IBM SOA Associate |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 15:05:14
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
ManchesteR wrote:pelo que eu entendi Thiago, vc quer ter 1 tipo de validação para 1 mesma action, mas esse tipo de validação deve ser diferente dependendo do "parametro" que essa action receber, certo?
Eu particularmente nao sei fazer isso, nem se é possivel, mas seria muito interssante saber se existe alguma maneira.
sim... vamos supor o seguinte...
Se o usuário quiser criar um novo ramo de atividade, para mim só será interssante validar se o nome do ramo de atividade não está em branco ou nulo!
Se o usuário quiser fazer um findByIdPK(Long id), minha validação deve garantir que o id sendo passado naum é nulo e que realmente é um número.
Por isso, dependendo da ação do usuario, a validação deveria ser diferente! O exemplo que dei é escroto, e é perfeitamente possível contornar bolando uma boa interface com o usuário, mas haverão situações (com certeza haverão) em que isso não será possível!
Thiago
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 15:06:03
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Thiago Senna wrote:
Infelizmente, o trabalho que estou fazendo, tenho que entregar em outubro. Por isso estou naquela correria (foi por causa desta merda que naum fui no CJ  ). Felizmente já sei alguma coisa de webowrk, e só pelo fato de eu saber que é possível implementar tranquilamente aquela gambi q eu postei lá em cima, já fico muito feliz.
A jogada não é ser Spring MVC, é IoC companheiro. O WW tem um também né?
Então, faz um Dao genérico e um action genérico (tipo o que eu postei), vai dar um pouco mais de trabalho (que na verdade vai ser quase nada mesmo...) mas pelo menos você fica livre e vai fazer muito menos CTRL+C CTRL+V.
O WebWork faz transformação automática de valores e passa eles pro command sozinho também né? O resto é só felicidade
Mas, gaste o seu tempinho pra estudar o Spring mesmo, você não imagina o quanto ele ajuda
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 15:09:43
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Thiago Senna wrote:Se o usuário quiser fazer um findByIdPK(Long id), minha validação deve garantir que o id sendo passado naum é nulo e que realmente é um número.
Assim, esse tipo de coisa é dilema, se a busca no banco só pode ser feita pelo pk que está sendo passado e essa chamada vem de um link que você mesmo criou na sua interface, a única chance dela vir errada é o cara mexer no link "pra ver o que acontece" e se ele fizer isso, um maravilhoso stack trace de number format exception é mais do que merecido
Ou então mostra uma página de erro, (como as configuradas no web.xml) dizendo que as informações enviadas são incorretas.
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 15:23:04
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Maruício wrote:
A jogada não é ser Spring MVC, é IoC companheiro. O WW tem um também né?
Tem sim Maurício! Inclusive estou usando ele para setar o DAO. Mas infelizmente naum entendi bém sua colocação. Por acaso vc estaria dizendo sugerindo de eu usar IoC para a validação dos dados?
Maurício wrote:
Então, faz um Dao genérico e um action genérico (tipo o que eu postei), vai dar um pouco mais de trabalho (que na verdade vai ser quase nada mesmo...) mas pelo menos você fica livre e vai fazer muito menos CTRL+C CTRL+V.
Bom, o meu problema em adotar radicalmente esta sua solução, apesar de muito estigante, é que estou usando Desenvolvimento guiado por testes. Não vai valer a pena pra mim agora mudar todos estes testes, sem contar que o padrão de action que o webwork traz é mais simples de usar se comparado com o spring (eu acho). Para testar um método qualquer da minha action, o único mock que eu precisaria criar era um MockDAO no máximo!
Outra vantagem que não estou afim de abrir mão é a simplicidade, e a forma direta como o assunto está sendo tratado. Se o método é incluir, quer dizer incluir Ramo de Atividade e acabou. Não é necessário de um principiante no projeto ficar interpretando o que o código tá fazendo para saber se ele vai excluir, alterar e etc... Seu eu fizer essa alteração, meu grupo de trabalho terá mais dificuldades de acompanhar!
Maruício wrote:
O WebWork faz transformação automática de valores e passa eles pro command sozinho também né? O resto é só felicidade
Essa passagem automática de parâmetro seria pegar os parâmetros vindo do request e setá-los dentro de modelo? Se for isso, sim, o webwork faz!
Mas a grande questão é que o webwork já possui um mecanismo bastante maduro para validação utilizando interceptor e arquivos de configuração com xml, deixando assim minha action bém desacoplada da validação. Isso é algo que eu gostaria de reaproveitar deste framework.
Maruício wrote:
Mas, gaste o seu tempinho pra estudar o Spring mesmo, você não imagina o quanto ele ajuda
Com certeza! Não vejo a hora de começar a estudar! hehe
Thiago
This message was edited 1 time. Last update was at 22/08/2005 15:24:22
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 15:37:45
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Manchester wrote: Eu particularmente nao sei fazer isso, nem se é possivel, mas seria muito interssante saber se existe alguma maneira.
Se eu conseguir descobrir algo, colocarei aqui neste tópico a solução que eu adotei!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 16:14:27
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Pessoal... acho que encontrei a solução!
Só encontrei a fonte para estudar e colocar validações diferentes para uma mesma action! O link é este:
http://wiki.opensymphony.com/display/WW/Validation+Examples
Daí dêem uma olhada em Visitor Validation Example.
Felizmente, é possível fazer com que o webwork consiga usar diferentes validações para uma mesma action!
Obrigado a todos pela ajuda!
Abraços!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2005 16:43:34
|
ricardolecheta
GUJ Master
![[Avatar]](/images/avatar/b59c67bf196a4758191e42f76670ceba.jpg)
Membro desde: 17/05/2003 13:42:10
Mensagens: 1486
Localização: Curitiba
Offline
|
Thiago,
é como vc escreveu antes:
RamoAtividadeAction-inclui-validate.xml
RamoAtividadeAction-altera-validate.xml
RamoAtividadeAction-exclui-validate.xml
neste caso tem um action declarada no xwork.xml para cada alias, ex:
<action name="altera" class="..." method="altera"
<action name="inclui" class="..." method="inclui"
lembrando que vc pode usar o metodo validate() da action tb...
e o esquema do DAO genérico e IoC é show de bola mesmo
|
Ricardo R. Lecheta
Livro - Google Android (português)
http://www.livroandroid.com.br/
http://livroandroid.blogspot.com/
http://www.livetouch.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 08:01:26
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Valeu Ricardo...
Pelo que eu li da doc do webwork, vi que dava para fazer o que eu estava querendo, mas tava muito difícil de enteder... e isso pq ia ser do jeito mais difícil.
Agora que vc falou que dá pra fazer assim tranquilamente, demoro.. é esse mesmo que eu vou fazer!
Só mais uma pergunta..
E quando eu chamar a minha action através de uma urnl, e eu colocar o nome RamoAtivadadeAction!Inclui, o webwork também executará o RamoAtividadeAction-inclui-validate.xml ?
Abraços!
Thiago
This message was edited 1 time. Last update was at 24/08/2005 08:02:16
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 08:09:52
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Assim, só pra matar a curiosidade, se pra inserir tem uma validação, que tem que ser obedecida pra poder enviar os dados pro banco, porque a de editar é diferente?
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2005 08:56:28
|
ricardolecheta
GUJ Master
![[Avatar]](/images/avatar/b59c67bf196a4758191e42f76670ceba.jpg)
Membro desde: 17/05/2003 13:42:10
Mensagens: 1486
Localização: Curitiba
Offline
|
Thiago Senna wrote: E quando eu chamar a minha action através de uma urnl, e eu colocar o nome RamoAtivadadeAction!Inclui, o webwork também executará o RamoAtividadeAction-inclui-validate.xml ?
boa pergunta não sei...
acho que não pq este !bang é um atalho que vc usa para indicar o método que vai executar, e não o alias... precisa testar para ver
|
Ricardo R. Lecheta
Livro - Google Android (português)
http://www.livroandroid.com.br/
http://livroandroid.blogspot.com/
http://www.livetouch.com.br/ |
|
|
 |
|
|