Alternativa ao DAO

Boas senhores camaradas,
Embora o tema “DAO obsoleto” esteja mais que batido, gostaria de saber quais alternativas ao dao estão implementando.
Sabemos que DAO é um design pattern que visa abstrair a camada de persistência, para que as demais camadas não conheçam a forma na qual os dados são persistidos.
Sabemos, também, que com o advento de JPA 2, independente da implementação, essa abstração está implícita no uso de qualquer framework ORM.
E, por fim, sabemos que é comum (e, também, um anti pattern) utilizar DAO + ORM.

Portanto, como vocês tem contornado isso? De que forma resolvem a camada de persistência, seja web, desktop ou mobile.

Se possível (e se estiverem com paciência e com vontade) gostaria que mostrassem como ficara a organização dos elementos (classes, interfaces) que tornam o modelo adotado possível.
Não precisa colocar o código, só algo como:

Persistência: XYZ.java
Bla bla bla 1: ABC.java

[quote=drsmachado]Boas senhores camaradas,
Embora o tema “DAO obsoleto” esteja mais que batido, gostaria de saber quais alternativas ao dao estão implementando.
Sabemos que DAO é um design pattern que visa abstrair a camada de persistência, para que as demais camadas não conheçam a forma na qual os dados são persistidos.
Sabemos, também, que com o advento de JPA 2, independente da implementação, essa abstração está implícita no uso de qualquer framework ORM.
E, por fim, sabemos que é comum (e, também, um anti pattern) utilizar DAO + ORM.

Portanto, como vocês tem contornado isso? De que forma resolvem a camada de persistência, seja web, desktop ou mobile.

Se possível (e se estiverem com paciência e com vontade) gostaria que mostrassem como ficara a organização dos elementos (classes, interfaces) que tornam o modelo adotado possível.
Não precisa colocar o código, só algo como:

Persistência: XYZ.java
Bla bla bla 1: ABC.java

[/quote]

A partir do momento que podemos ter um EntityManager em uma classe Java, os DAO’s se tornaram descenessários para acesso a bancos de dados relacionais, porém ainda são necessários para acesso a outras fontes de dados (xml, texto, properties, etc).

Um padrão que tenho adotado muito ultimamente é o repository [1] que trabalha entre a camada de persistência e a camada de domínio, e.g. :

interface RepositorioDeContasAPagar {
	List<Conta> vencidas();
	List<Conta> aVencerEm(Calendar data);
        Conta comNumeroDeDocumento(Long numero);

	...
}

É muito comum você ver pessoas chamando isso de ContasAPagarDAO ou algo do tipo, o que pode gerar uma certa confusão.

[1] http://martinfowler.com/eaaCatalog/repository.html

Também tenho interesse no assunto, sempre vejo o pessoal não recomendando utilizar DAO com JPA, concordo com os argumentos apresentados, mas nunca achei alguém que indique como deve ficar a estrutura do projeto.

Mais alguém além do Jairo Junior possui uma recomendação para contornar essa situação?

[quote=douglas_arantes]Também tenho interesse no assunto, sempre vejo o pessoal não recomendando utilizar DAO com JPA, concordo com os argumentos apresentados, mas nunca achei alguém que indique como deve ficar a estrutura do projeto.

Mais alguém além do Jairo Junior possui uma recomendação para contornar essa situação?[/quote]
Justamente por isso eu resolvi abrir o tópico.
Ao pesquisar, me deparei com as sugestões de usar o active record, porém, não cheguei a pesquisar sobre isto, que é muito utilizado (por que veio do) ruby.