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. Algumas pessoas chamam classes deste fim de Manager, Negocio, Business e coisas que remetem a Regra de Negocio.
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.