Olá:
Minha situação é a seguinte: Tenho uma classe que usa um DAO preenchido no construtor:
public class UserBE {
private UseeDAO userDAO;
public UserBE() {
this.userDAO = DAOFactory.getUserDAO();
}
public void addUser(User user) {
this.userDAO.addUser(user);
}
// E outros métodos do gênero ...
}
Agora quero refatorar esta classe para usar Testes Unitários. Uma abordagem comum seria criar um getter e setter para o DAO:
public class UserBE {
private UseeDAO userDAO;
public UserBE() {
}
public UserDAO getUserDAO() {
return this.userDAO;
}
public void serUserDAO(UseeDAO userDAO) {
this.userDAO = userDAO;
}
public void addUser(User user) {
this.userDAO.addUser(user);
}
// E outros métodos do gênero ...
}
Entretanto, quero limitar a visibilidade deste gettter e setter. Minha intenção é fazer algo como:
public class UserBE {
private UseeDAO userDAO;
public UserBE() {
}
// Apenas para uso interno.
private UserDAO getUserDAO() {
if(this.userDAO == null) {
this.userDAO = DAOFactory.getUserDAO();
}
return this.userDAO;
}
// Visível apenas para classes do mesmo pacote.
void serUserDAO(UseeDAO userDAO) {
this.userDAO = userDAO;
}
public void addUser(User user) {
this.getUserDAO().addUser(user);
}
// E outro métodos do gênero ...
}
Estou supondo que a(s) classe(s) de teste(s) fique(m) no mesmo pacote que a classe a ser testada. Além disso com lazy instantiation no getter estou evitando chamadas desnecessárias ao construtor caso o DAO não seja necessário e já instruo para usar o DAOFactory por padrão.
Então quero saber a opinião de vocês. Será que isso faz sentido? Já viram algo assim antes? Será que há algum pattern ou refatoração parecido com isso?
Grato,