[quote=fredferrao]
pcalcado: como estou iniciando, nao entendi muito bem a sua colocação? como seria isso: minha classe de negocios depender de uma interface? ela estenderia uma interface e ficaria obrigada a implementar tais metodos? ou ela implementaria uma interface(implements)?[/quote]
Você tem as classes na camada de negócios, sei lá: Cliente.
A classe Cliente precisa de algo que persista seus dados, no caso era o dao.
class Cliente{
private DaoCliente meuDao = new DaoCliente();
public save(){
meuDao.save(this);
}
}
Nada demais, exceto pelo fato que qualquer mudança na classe DAO, que está na camada de persistência, afeta diretamente a classe Cliente. Mau, mau, mau!
Vamos fazer o Dao implementar uma interface da classe de negocios:
class DaoCliente implements ClienteRepository{
//...
}
E fazer o Cliente depender do Repository:
class Cliente{
private ClienteRepository repositorio = null;
public void setRepository(ClienteRepository rep){this.repositorio=rep;}
public save(){
repositorio.save(this);
}
}
Agora seu cliente depende de uma abstração, um lugar onde clientes são armazenados. Se é um DAO, uma classe que gera HQL, um serializador, tanto faz, desde que ele cumpra o contrato.
Eu adotaria uma abordagem qualquer que não a propria classe instanciar (nesse caso a idéia não vale de nada
).
Uma Factory funciona bem na maioria das vezes, fiz bastante isso já, e IoC para quem puder usar.