Boa tarde pessoal.
Esta discução foi muito produtiva. Com ela consegui esclarecer várias dúvidas deste pattern, e aproveitei para incluir ele numa aplicação de testes que desenvolvi, para me aprofundar em alguns conceitos de Java para Web.
Modifiquei toda a minha aplicação, mais fiquei com uma dúvida. Irei explicar abaixo qual o objetivo da aplicação e como realizei a divisão, para que vocês consigam enchergar melhor o meu problema.
A aplicação de testes que estou desenvolvendo se baseia num pequeno caso de usos referente a clínicas médicas, aonde pode se realizar as seguintes operações:
Pesquisar Clínicas
Inserir telefones da clínica
Remover Telefones da clínica
Localizar município aonde a clínica está instalada
Atualizar dados da clínica
Pois bem, baseando-me na discução realizada neste forum, criei uma arquitetura no meu projeto, aonde existe a classe ClinicaControler, que é uma Servlet e é o Front Controller da aplicação. Este Front Controller instancia a classe RequestHelper, que realiza duas funções em seu contrutor: Encapsular o request na classe HttpRequestData (que implementa a interface RequestData), e executa o método create da classe CommandFactory (passando os atributos URI de requisição da página e o objeto HttpRequestData).
Este atributo irá me retornar o command referente a solicitação realizada. Nesta classe eu capturo na requisição o mapeamento, que coloquei terminando com “.do” para facilitar a declaração no web.xml, e verifico em um if qual classe devo instanciar (Não sei se esta seria a melhor forma de implementar esta Factory. Caso exista um jeito melhor, por favor me avisem).
Beleza. Então já tenho o meu command instanciado. Agora executo o método execute, que irá processar a tarefe que o Command instanciado implementa. É neste ponto que tenho um problema.
Vou dar um exemplo:
Os comandos “Adicionar Telefone” e “Remover Telefone”, como o nome sugere, adicionam ou removem os telefones. Estes telefones se encontram numa collections da VO Telefone, que se encontra na sessão (o restante dos dados da clínica se encotnram no escopo da requisição. O caso dos telefones é a única excessão). Pois bem, depois de ter adicionado ou removido um telefone da lista, devo chamar retornar a minha página. O problema é que a página precisa receber um objeto VO da classe Clínica, populado, para preencher novamente a página. Por causa disso preciso preencher esta classe tanto no command AdicionarTelefone quanto no RemoverTelefone. Isto gera uma duplicação de código.
Gostaria de saber como poderia fazer para resolver esta incoveniência no meu modelo.
Espero que tenham entendido o meu problema. 