Neste caso compensa a herança?

8 respostas
cleriston

Estou desenvolvento um sistema, para mim mesmo, para treinar Java.

Tenho em uma camada DAO as seguintes classes com CRUD

public class VeiculoBO {
    
    
    public VeiculoBO() {
    }

    protected void create(Veiculo veiculo) {  
      ...  
    }

    protected Collection retriveAll() {  
      ...  
    }

    protected void update(Veiculo veiculo) {  
      ...  
    }

    protected void delete(Veiculo veiculo) {  
      ...  
    }
}

e

public class ProprietarioBO {
    
    
    public ProprietarioBO() {
    }

    protected void create(Proprietario proprietario) {  
      ...  
    }

    protected Collection retriveAll() {  
      ...  
    }

    protected void update(Proprietario proprietario) {  
      ...  
    }

    protected void delete(Proprietario proprietario) {  
      ...  
    }
}

Os métodos eu deixei protected, pois apenas a DAOFactory, que está na mesma camada, vai poder acessá-los e “repassá-los” para outra camada.

Neste caso compensa criar uma classe assim :

public abstract class DAO {
 
    public DAO() {
    }
    
    protected abstract void create(Object objeto);
    protected abstract Collection retriveAll();
    protected abstract void update(Object objeto);
    protected abstract void delete(Object objeto);    
}

e fazer as outras classes serem filhas da DAO

public class VeiculoDAO extends DAO{
 
    public VeiculoDAO() {
        Collection c;
    }

    protected void create(Object objeto) {
        Veiculo veiculo = (Veiculo)objeto;
        ...
    }

    protected Collection retriveAll() {
        ...
    }
    

    protected void update(Object objeto) {
        Veiculo veiculo = (Veiculo)objeto;
        ...
    }

    protected void delete(Object objeto) {
        Veiculo veiculo = (Veiculo)objeto;
        ...
    }
}
public class ProprietarioDAO extends DAO{
 
    public ProprietarioDAO() {
        Collection c;
    }

    protected void create(Object objeto) {
        Proprietario proprietario = (Proprietario)objeto;
        ...
    }

    protected Collection retriveAll() {
        ...
    }
    

    protected void update(Object objeto) {
        Proprietario proprietario = (Proprietario)objeto;
        ...
    }

    protected void delete(Object objeto) {
        Proprietario proprietario = (Proprietario)objeto;
        ...
    }
}

8 Respostas

deadlock

Na minha opinião compensa. Se estiver usando jdk 5, faça uma pesquisa sobre o recurso generics (e utlize para criar um dao genérico)…

cleriston

Ok! Vou pesquisar.
Tira + uma duvida, antes de criar a classe abstrata, eu fui tentar fazer um interface, só que não foi permitido colocar métodos “protected”. Pq isso ?

ViniGodoy

Por definição, interfaces só suportam métodos públicos.

danieldestro

Acho melhor não misturar as coisas assim. Mesmo porque você replicará métodos sem necessidade. Não vejo a necessidade de ter “milhares” de BOs que no fundo fazem a mesma coisa.

Como o amigo disse, crie um DAO, use Generics, e aproveite da abstração.

cleriston

Eu li sobre Generics mas gostaria de tirar um dúvida.
O conselho sobre o Generics é apenas para o método retrivelAll né ?

public class VeiculoBO {
     
     
     public VeiculoBO() {
     }
 
     protected void create(Veiculo veiculo) {  
       ...  
     }
 
     protected Collection<Veiculo> retriveAll() {  
       ...  
     }
 
     protected void update(Veiculo veiculo) {  
       ...  
     }
 
     protected void delete(Veiculo veiculo) {  
       ...  
     }
 }
public class ProprietarioBO {
     
     
     public ProprietarioBO() {
     }
 
     protected void create(Proprietario proprietario) {  
       ...  
     }
 
     protected Collection<Proprietario> retriveAll() {  
       ...  
     }
 
     protected void update(Proprietario proprietario) {  
       ...  
     }
 
     protected void delete(Proprietario proprietario) {  
       ...  
     }
 }
deadlock

deadlock:
Se estiver usando jdk 5, faça uma pesquisa sobre o recurso generics (e utlize para criar um dao genérico)…

O uso de generics pod ser para todos os métodos. Acho que a resposta anterior ficou um pouco incompleta. O uso de generics ajuda se vc estiver utilziando hibernate tb. Pelo menos eh o q eu acho…

cleriston

Nos exemplos q vi, foi utilizado os Generics em Collections (list, hash, etc).
Como Generics usaria no métoro create ?

Desde já fico grato pela ajuda

deadlock
public class GenericDAO <T> {

public void create(T obj) {



sessao.save(obj);



}

}

public class AlunoDAO extends GenericDAO<Aluno> {}

mais ou menos assim…
obs.: sessao é do tipo Session (definido pelo Hibernate)

Criado 26 de fevereiro de 2007
Ultima resposta 27 de fev. de 2007
Respostas 8
Participantes 4