Aonde as classes Medico, Vendedor e AnalistaSistemas são filhas da classe Pessoa. No momento de modelar as classes de persistência utilizando DAO seria melhor criar uma classe DAO pra cada entidade:
A modelagem é flexível.
Da mesma forma que você não precisa colocar nos diagramas todas as classes, os métodos menos relevantes podem ser suprimidos.
É fato que, quando você trabalha com classes especializadas, muitos dos atributos e operações das classes pai não serão repetidos (não há razão para isto, pois a UML dá suporte para essa abstração).
Ainda mais em se tratando de uma herança polimórfica em que a sobrecarga de métodos vai ser peculiar a cada classe (Vendedor, Medico, etc).
Quando falar que é preciso salvar uma nova pessoa, sabe-se que ela será um medico, um vendedor através das business rules e do contexto atual.
Não estou utilizando JPA. Estou utilizando simplesmente JDBC.
Estou mais preocupado com a modelagem orientada a objetos em si. Se eu tiver um método na classe PessoaDAO:
public void save(Pessoa pessoa, int tipo){
switch(tipo){
case MEDICO:
//salva os dados do medico
case VENDEDOR:
// os dados do vendedor
case ANALISTA_SISTEMAS:
// os dados do analista de sistema
}
}
Essa forma de implementar é errada? Ou Seria melhor eu ter um método ‘save’ especifico pra cada filho de Pessoa?
Vê se você concorda comigo? Eu faria assim, lógico que existe milhões de maneiras de se fazer.
Minha classe Pessoa
public abstract class Pessoa {
public abstract boolean save();
}
Minha classe Médico, implementando o método salvar imposto pelo pai
public class Medico extends Pessoa{
@Override
public boolean save() {
//Salvo para um médico
return false;
}
}
Minha classe Arquiteto, implementando a seu modo o método imposto pelo pai
public class Arquiteto extends Pessoa {
@Override
public boolean save() {
//Salvo para um arquiteto
return false;
}
}
Chamando minhas classes para executarem a tarefa de salvar.
public class Main {
public static void main(String[] args) {
Pessoa objeto = new Medico();
objeto.save();
Pessoa objeto2 = new Arquiteto()
objeto.save();
}
}
Acredito que assim fique melhor seu código, pois cada filho utiliza o método salve() a seu modo, e todos tem um contrato com o pai. Utilize polimorfismo e herança.