Olá pessoal, estou estudando uma arquitetura onde eu possa trocar de repositorio facilmente, como hora salvar os dados em um determinado banco de dados, outra salvar em xml, outras em txt e etc… afim de aprendizado, dei uma lida em diversos topicos aqui no guj e em blogs sobre o repository, domainstore, query object etc…
Para aprendizado utilizei uma entidade chamda CartaoCredito e outra chamada FaturaCartaoCredito, criei um repositorio para a FaturaCartaoCreditoRepository, coloquei o Repository no final para diferenciar da entidade FaturaCartaoCredito, nesse repositório tenho alguns métodos como getFaturasEmAberto, getFaturaDoMes etc…
Por fim, criei uma interface IDomainStore(o I geralmente é utilizado no .NET e eu acho interessante, pois batendo o olho você sabe que é uma interface), com alguns métodos como, save, delete e query, e algumas implementações do IDomainStore como TXTDao(Salva em arquivo texto), XMLDao(salva em XML) etc…
Eu criei um xml de configuração para trocar o tipo do DAO, eu instancio a classe definida nesse xml, e armazeno os dados conforme a classe configurada.
Até este ponto a arquitetura está correta ?
Caso sim, minha maior dúvida agora é quanto ao método query do meu IDomainStore, pois eu preciso de uma forma de saber a qual classe esses critérios pertencem, e buscar essas informações, por exemplo, no método getFaturaDoMes da classe FaturaCartaoDeCreditoRepository, eu chamo o método query do meu IDomainStore passando um objeto FaturaCartaoCreditoQuery com o mês preenchido e o numero do cartao de credito, na implementação dessa interface, como esse método vai saber que tem que buscar FaturasCartaoCredito com os parametros informados ? E quando eu passar por exemplo, query(CartaoCreditoQuery) com os dados preenchidos de um cartão com vencimento até x data ?
Obrigado!