Pessoal, td bem ?
Eu queria uma opinião sobre a criação de actions no struts 2.
O que é melhor (ou mais usual) ?
a) Criar uma action para cada pagina jsp, ou seja, na action terá apenas os controles (variaveis) e métodos que aquela página pode executar ou;
b) Criar uma action por assunto, ou seja, em tratando de cadastro de cliente por exemplo, uma action pode ter todos os métodos que as paginas que cadastram e buscam o cliente. Ou seja, apenas mapear no XML qual o método que a pagina usaria, porém na action teriam todos os métodos relacionados a cliente. Isso implica em ter variaveis para o controle (input de dados atraves da pagina web) que seriam inutilizados.
Pode até ter alguma outra idéia que eu ainda não conheço. Mas, qual a opinião de vocês ?
Obrigado !!!
Boa tarde.
Eu acho que nem uma, nem outra. Mas isso depende muito do seu sistema. EU diria para você criar mais ou menos uma action por caso de uso no nível de sistema. Mas isto não é regra.
Vamos pensar que seu sistema seja um cadastro de clientes. As actions poderiam ser:
[list]incluir o cliente;[/list]
[list]consultar cliente;[/list]
[list]listar clientes;[/list]
[list]excluir cliente;[/list]
[list]alterar cliente.[/list]
Isto evita que você crie um baita código monstro afunilando um tal de “manter clientes” e tratando a real intenção do usuário.
De qualquer forma, espero que outras pessoas contribuam nesta questão.
Abs!
rodrigues.danilo,
Obrigado pela resposta. Inicialmente pensei como vc mas, esbarrei no problema de ter actions que pra mim nao teria muito sentido, por exemplo a de deletar cliente (DeleteCliente.action) Esta action, imaginei que teria apenas o metodo para excluir o cliente mas, na tela seria mais ou menos assim:
Uma tela possui um filtro (Busca cliente) e uma lista (de resultados). A partir da lista vc pode Excluir o cliente ou Selecionar o cliente para atualizar.
A minha duvida maior é se, eu tivesse alem dessa tela uma outra tela parecida porem de endereço de cliente (que faz parte do cliente).
Eu teria que fazer uma action somente para o endereço do cliente ou poderia usar a mesma que fez a busca e o cadastro do cliente ?
Obrigado.
Veja esse livro http://www.infoq.com/minibooks/starting-struts2.
Na p 70 ele da dicas de como fazer paginas de CRUD. Ele aconselha utilizar a mesma action para todas as operações: Criar, remover, etc.
Eu uso essa tecnica e aprovo.
Vc tem que entender q as action do struts 2 nao devem ter logica de negocio. Elas apenas devem ser um ponto para acesso do model.
Sendo assim, nao ha problema em vc agrupar numa mesma action varias operações, ja q cada operação deverá ser bem simples, apenas delegando ao model a tarefa.
Se vc programou em struts 1, sabe q la era bem diferente. Costuma-se ter action enormes com com muita logica que nao era de interface. Ali, era melhor ter uma action para cada operação, mas no struts 2 nao ha muita necessidade disso.
Obrigado bbviana.
Ja deu uma idéia legal … acho que farei desta forma mesmo. Eu já havia desenhado assim porém, na hora de implementar eu repensei e preferi perguntar.
Só uma outra questão, é ter variaves que nao serao utilizadas no momento da execução do método. Por exemplo, ter 4 campos no cadastro e 3 na consulta para filtro. Na action com todos os metodos juntos, acredito que precisará ter 7 variaves. Porém, para um metodo de consulta só utilizarei 3, e o framework struts só vai me popular estas variaveis mesmo (pq so tem esses campos na tela). Isso pode degradar a aplicação ?
Mas, acredito que esta seja uma solução mesmo …