Preciso montar uma arquitetura em MVC onde primeiramente será bem simples:
Apenas JSP e Servlet, só clases java simples com regras de negócio e acesso a banco de dados via JDBC.
Hoje esta aplicação irá ficar em apenas um servidor único.
Mas amanhã ela deve estar preparada para migrar para o modelo EJB3.
Como eu devo prepara-la para quando chegar a hora desta migração, esta ocorra da forma menos trabalhosa possivel?
Vi duas sugestões:
1- usando business delegate e façade. Onde minhas classes de negocios iriam implementar uma interface, que mais para frente seria a interface dos meus EJB’s, e todos os meus objetos de negócio seriam do tipo desta interface.
2- usar uma fabrica (Abstract Factory) onde sempre seriam retornados objetos também do tipo da interface.
Alguma dessas sugestões é mais correta? Ou existe outra forma de fazer isto?
Sempre crie uma interface para definir os métodos que vc vai usar;
Todas as classes tenham um construtor padrão;
O principal problema que vc deve mudar depois é a chamada às classes que serão gerenciados pelo EJB. Sem EJB, vc deve instanciar seus objetos usando “new SuaClasse();” e, com EJB, vc faz lookup da sua classe usando a classe InitialContext.
Mas tome muito cuidado durante o desenvolvimento sem EJB. Dependendo de como vc fizer, pode acabar ficando com muitos objetos consumindo memória no servidor, já que não haverá um container fazendo o controle.
Mas eu vou usar ejb 3… não vou precisar fazer o lookup manual…
o que eu preciso saber então é como organizar o código, de forma a implementar o delegate e o façade e as interfaces dos meus objetos de negócios no pacote certo. E é nisto que estou com dúvida.
Onde devo codificar os delegates? E os façades?
Só criando interfaces para as minhas classes de negócio será suficiente?
Aqui no trabalho passamos por esse problema e usamos a seguinte solução… Nao sei se eh a melhor porque ainda nao fizemos a migracao, mas parece funcionar bem.
1 - Como disse o rissato, todas as classes tem interface e um construtor padrao
2 - Elas sao mapeadas como atributos nos Managed Bean dos JSF
3 - Ao recuperar uma classe de negocio, vemos se a mesma foi “injetada” pelo repositorio. Caso contrario, usamos um ServiceLocator para buscar no Spring e entao no InitialContext.
Infelizmente nao faco ideia se essas geringoncas funcionam de verdade
Qualquer abordagem que escolha usar, crie CENTENAS de testes de integracao\teste funcionais automatizados para garantir que tua aplicacao vai continuar funcionando apos a migracao.