Bom dia pessoal,
Faz um certo tempo que leio em vários lugares para sempre programar orientado a interfaces, evitar replicação de código, sempre que possível usar composição/herança (adequadamente é claro).
Enfim após ler todas essas discussões sobre boas práticas e tentar aplicar durante minha codificação, sempre fiquei com uma dúvida, explico.
Digamos que eu tenha uma Classe DaoGenerica que tem as operações básicas de um CRUD.
Isto posto, possuo tambem uma classe DaoPessoa que extende a classe DaoGenerica entretanto alem das operações básicas de CRUD eu desejo realizar outras operações que fogem do CRUD, por exemplo, eu desejo realizar uma consulta que me retornara um relatório X, mas tambem quero realizar uma consulta que me retorna um relatório Y e outra por sua vez retorne um relatório Z. Além disso eu gostaria de poder buscar a Pessoa por apenas por código ou nome, ou sobrenome. Gostaria de buscar todas as pessoas com mais de 50 anos ou com menos de 20.
Ou seja, quando as operações que eu desejo realizar no banco fogem das oferecidas por uma DAO tão generica ao ponto de poder ser herdadas por várias DAO especificadas qual é a abordagem mais adequada ?
- Extender a DAO genérica e implementar uma interface X com meus métodos especificos declarados ? Mas nesse caso eu perco a flexibilidade de programação orientada a interface
- Utilizar de composição dentro da minha Dao especifica ? Ainda assim perco a vantagem do polimorfismo e programação orientada a interface
Enfim, gostaria de saber a opinião de vocês.
Agradeço a todos que contribuirem para o tópico.
