[quote=rodrigoallemand]Eu sempre divido as coisas assim, levando-se em consideração, as classes de dominio (Domain Model).
–> BusinessObject (BO) --> Repository --> DAO --> Entity
onde:
BO: Regra de negócio propriamente dita, onde vc pode chamar mais de um Repositorio. Nela ficarão métodos do tipo VerificarPedidosExpedidos, recuperarPedido, cancelarPedido, incluirDetalhePedido.
Repository: Interface de uma área do seu sistema, as vezes por entidade, outras por unidade de negocio do seu sistema. Por exemplo, se vc tem uma estrutura assim Pedido tem DetalhesDePedido, vc tem um PedidoRepository que fará as rotinas com as entidades de Pedido e DetalhePedido. Métodos dessa interface são getPedidoByState, update, save, delete (estes três ultimos, se possivel, extendendo um repositorio genérico)
DAO: A implementação de um Repositorio. Aqui ficará a sua rotina de acesso a banco propriamente dita, seja ela Hibernate, JPA, iBATIS, JDBC, o que seja. Segue a mesma lógica do Repositorio, só que fazendo a sua implementação.
Entity: os POJOs referentes a sua classe, com os respectivos métodos get e set. Nestes, quando possivel alguma regra referente somente a entidade, eu gosto de colocar, como isChamadoValido, checando algumas regras de negocio.
Bem, é mais ou menos isso que eu coloco nos sistemas. É um conceito simples, funcional, bem dividido e facil de se entender em futuras manutenções.[/quote]
Creio ter entendido a filosofia da arquitetura apresentada por você. Vou procurar me aprofundar um pouco mais nesses conceitos, antes de tentar aplica-los numa futura e inevitável refatoração.
Entretanto gostaria de saber, nessa modelagem atual, há erro conceitual? Mesmo eu tendo que seguir esse caminho de baixo para cima?
Devo lembrar que é um aplicativo “console” que fica rodando indefinidamente no servidor. Não é programação WEB.
No seu exemplo, Pedido teria um Set de DetalhesDoPedido, correto? Talvez seja o mesmo que eu usar ItemDoPedido, como é o meu costume. Deve ser uma página WEB. Talvez a minha abordagem de “cima para baixo” na página que acessa as informações esteja correta, talvez eu só precise refatorar para essa arquitetura de BOs, VOs, Repository, etc. Este último é novidade para mim, os outros eu já tinha ouvido falar.
Acho que vou abrir outro tópico para tirar uma dúvida minha sobre modelagem dessas classes BOs e VOs que já me persegue há algum tempo.
Obrigado!