Olá pessoal,
Posso tirar algumas duvidas e algumas criticas? Sou novo na orientação a objetos, contudo já sou desenvolvedor há mais de 10 anos em outras linguagens.
Montei este modelo para conexão com o banco de dados. A idéia é utilizar padrão SQL ANSI de forma que eu faça o desenvolvimento em um banco (MySQL por exemplo) e alterando um único parâmetro em uma classe de configuração seja utilizado outro (Oracle por exemplo).

A principal é a classe ?conexao", que deve ser instanciada nos DAOs, através dos seus métodos.
ServidorSQL é uma classe abstrata, herdada e por SrvMySQL e SrvMySqlServer. Estas ultimas devem implementar os métodos abre, fecha, seleciona e executa.
De acordo com o atributo ?tipoServidor? do objeto BancoDeDados, um atributo de conexão, a classe ?conexao? decide qual dos objetos (SrvMySQL / SrvMySqlServer) deve instanciar e utilizar.
Este modelo me parece funcional, mas estou com duvidas se criei a melhor solução utilizando a orientação a objetos, ou então se eu ainda posso fazer melhor.
Obrigado!
Eu já tentei fazer algo desse tipo há um tempão atrás, mas não foi nada muito sofisticado. Foi na munheca mesmo.
O que eu vejo de problemas nesse tipo de situação é o seguinte:
Pool de conexões:
Se a sua necessidade é criar um código simples que apenas alterne entre banco de testes e banco de produção, dependendo de onde a aplicação estiver rodando, não há muitos problemas. Agora, se a sua intenção é acessar vários bancos em uma mesma “instância” da sua aplicação, seria ideal que você refizesse essa modelagem considerando um pool de conexão pra cada banco. Pelo que eu vejo dos métodos na sua modelagem isso não foi considerado (abre, fecha, conecta, desconecta…). Obviamente isso vai aumentar o grau de complexidade do modelo, mas acho que nada colossal. Acho que o problema aqui seria o consumo de memória da aplicação que cresceria bastante.
SQL Ansi:
Os bancos que você vai utilizar já existem ou serão criados do zero por você? Se eles já estiverem criados, o problema aumenta um bocado, porque além de você ter que considerar as diferenças de sintaxe e tipos de dados, ainda existem as particularidades de cada um (stored procedure, functions e principalmente as sequences do Oracle x campos autonumeráveis). Acho que uma abordagem legal seria algo como os Dialects que o Hibernate usa para resolver esse problema. Aliás, porque não utilizar diretamente o Hibernate para eliminar esse problema (só não sei se dá pra usá-lo com mais de um banco)? Novamente, o grau de complexidade vai aumentar, mas aí acho que criar pequenas sub-camadas ajudaria a ler melhor a modelagem.
Mas, mesmo que os bancos tiverem que ser criados do zero por você, ainda assim essas questões acima terão que ser consideradas.
Como tem muito tempo que eu fiz uma solução desse tipo eu não me lembro se eu enfrentei mais algum problema. Se eu me lembrar, eu complemento em outro post.
blz?
Pelo que entendi sua dúvida é mais genérica.
No caso de gostaria de charmar mátodos comuns para salvar uma aplicação independente do banco que está usando, certo?
Se for este caso vc poderá chamar pela própria interface o respectivo método. Dessa forma vc fica “independente” de classes que acionam um banco ou outro. A interface encapsula os métodos que seriam comuns aos dois bancos, sendo que para cada banco é implementado de uma forma.
Caso não seja essa opção favor verificar explicar melhor seu problema para eu tentar ver uma possível solução.
faloww