Pessoal, bom dia.
No projeto do qual participo, ficou decidido que seria utilizado DispatchActions, e seria criada uma action por caso de uso. As classes que contém as regras de negócios também foram divididas por caso de uso.
Por exemplo, na parte de manipulação de dados, existe um caso de uso para cadastramento, e outro para manutenção de dados (este ultimo engloba operações do tipo edição, alteração, exclusão etc).
Pois bem, deixa eu dar um exemplo sobre esta implementação de casos de uso, para poder demonstrar uma dúvida que possuo.
Criei uma Action de cadastro, vamos chamar de cadastrarDadosAction. Esta action possui os métodos “inserir”, “inserirSalvo” e “visualizarDadosCadastrados”. Tmb foi criada uma classe que contém as regras de negócios chamada CadastrarDadosBLL. Esta classe contém os métodos “listarUF” e “inserirDados”.
Criei uma outra Action para a manutenção dos dados, vamos chamar de ManterDadosAction. Esta action possui os métodos “iniciar”, “listar”, “excluir”, “alterar”, “alterarSalvo”, “listarDados” e “prepararIniciarPaginaManipulacaoDadosVistoriador”. Também foi criada uma classe que contém as regras de negócios chamada ManterDadosBLL. Esta classe contém os métodos “listarDados”, “obterRegistro”, “alterarRegistro”, “excluirRegistro”, “listarUF”.
Na Action “cadastrarDadosAction”, o método “inserir” faz a carga da página que será utilizada na inseção dos dados, realizando o carregamento de dados para preenchimento de combos, entre outras tarefas.
O método “inserirSalvo” é responsável pela gravação dos dados, mostrando ao final uma página com os dados gravados, para configramação.
Na Action “ManterDadosAction”, o método “iniciar” faz a carga da página.
O método “listar” realiza uma pesquisa com os dados fornecidos pelo usuário, retornando o resultado para a página de manutenção de dados, que irá popular uma grid, que possue ao lado de cada linha os links “excluir” e “alterar”.
O método “excluir” é chamado quando se clica no link “exluir”. Ele realiza a exclusão do registro informado pelo usuário. Como é necessário retornar para a página de manutenção de dados com os dados da grid, e sabendo que este processo tmb será necessário no método “alterarSalvo”, retirei esta função do método listar e a coloquei no método “listarDados”, que é chamado pelos métodos “listar”, “excluir” e “alterarSalvo”, nestes dois ultimos caso não ocorra nenhuma exceção nas regras de negócios.
O método “alterar” deverá carregar os dados numa página para que seja realizada a modificação. Neste caso resolvi utilizar a mesma página usada para o cadastro, só modificando a nela a action e o método que serão chamados no momento da confirmação dos dados, e o título da página. Estas modificações passo para a página via requisição.
Aí já começa algum dos meus problemas.
Esta página eu estou chamando diretamente, tendo em vista que preciso setar algumas modificações. Como esta página de cadastro possui uma combo contendo os estados, devo realizar a carga dos estados antes de prosseguir. Para realizar esta carga, deve existir na minha classe de negócios um método que realize tal tarefa.
Por causa disso necessitei criar o método “listarUF” nas classes de negócios CadastrarDadosBLL e ManterDadosBLL.
Se fosse necessário fazer a carga de 5 campos diferentes, este código seria replicado nas duas actions e nas duas classes de negócios (no caso da classe de negócios o que seria replicado seria mais a chamada, pois o único papel deste método é encapsular o acesso ao médoto da minha classe DAO, que faz o acesso direto aos dados).
Existiria alguma forma melhor de se montar estas actions, de forma a eliminar estas duplicidades?
E quanto a minha decisão de criar um método que concentra um processo comum em várias actions? Está correto? Ou o melhor seria criar um outro método de ação dentro desta action que contenha estes processos, e realizar um forward para ele? Eu tinha feito desta forma inicialmente, mais como estava tendo problemas com a paginação do grid-layout, resolvi mudar. Além que ficou extranho fazer um forward para uma outra ação dentro da minha mesma action, quando poderia acessar diretamente.