Se interface nao persiste como identifica-la em caso de poliformismo

2 respostas
J

Em resumo tenho:

interface Persistable //segui a dica do sergiotaborda
getID() : Object
setID(Object obj);

class ClientePessoas extends Pessoa implements Cliente , Persistable
class ClienteEmpresa extends Empresa implements Cliente , Persistable

class CientePessoas
ID …
Double QualMeuDesconto

class CienteEmpresa
ID …
Double QualMeuDesconto //aqui é uma formula difente por isso o usa do poliformismo mais abaixo

Pessoa
ID …
double indicePotencialCliente

a interface Cliente nao tem ID pois nao persiste, porem ClientePessoa tem pois é persistivel.

modelagem a parte minha pergunta é:

class AlgumaOpercao
Cliente cliente
int Cliente_ID //atributo mapeado
FazerOperacaPara(Cliente cliente)

essa classe acima faz aguma coisa para cliente, mas para ela nao importa se é ClienteEmpresa ou ClientePessoa.

tb toh usando a dica do sergiotaborda http://www.guj.com.br/posts/list/69322.java tenho

Cliente cliente = ClienteRepository.findByID(345);

//dai vou passar o cliente para AlgumaOpercao, porem no metodoFazerOperacaPara

FazerOperacaPara(cliente);

//dentro desse metodo como classe FazerOperacaPara vai saber o ID do Cliente? para poder passar para o cliente_ID
private void FazerOperacaPara(Cliente cliente)

{

this.cliente = cliente;

this.cliente_ID = <a href="http://cliente.ID">cliente.ID</a> //mas Cliente a interface nao tem ID. e agora tb nao me interessa mais se é ClientePessoa ou ClienteEmpresa

}

nao estou duplicando topico, mas se alguem quiser ver http://www.guj.com.br/posts/list/69322.java a duvida é diferente, e se alguem quiser ver esse outro topico eu tb ficaria agradecido.

Agradeço desde ja.

2 Respostas

sergiotaborda

1)Porquê vc precisa acessar o ID da interface Cliente ? Vc precisa mesmo?
2)Se realmente precisa isso não significaria que o ID é uma caracteristica de Cliente ?
3) E nesses caso não teria Cliente que ser persistente ?

Repare, o problema é que vc quer destinguir uns clientes dos outros por um único atributo da classe.
Isto significa que cada objeto cliente é diferente do outro se esse atributo é diferente e é igual apenas se o atributo for igual. Isto significa que esse atributo caracteriza o objeto univocamente em qualquer camada da sua aplicação, inclusive na persistência.

Enfim, basta que Cliente seja Persistivel para que tudo dê certo.

J

sergiotaborda:
1)Porquê vc precisa acessar o ID da interface Cliente ? Vc precisa mesmo?
2)Se realmente precisa isso não significaria que o ID é uma caracteristica de Cliente ?
3) E nesses caso não teria Cliente que ser persistente ?

Repare, o problema é que vc quer destinguir uns clientes dos outros por um único atributo da classe.
Isto significa que cada objeto cliente é diferente do outro se esse atributo é diferente e é igual apenas se o atributo for igual. Isto significa que esse atributo caracteriza o objeto univocamente em qualquer camada da sua aplicação, inclusive na persistência.

Enfim, basta que Cliente seja Persistivel para que tudo dê certo.

  1. preciso para poder informar para classe AlgumaOpercao que tem um atributo cliente_id e esse é inofrmado no metodo FazerOperacaPara.
    Mas isso se resolve usando sua alternativa no topico http://www.guj.com.br/posts/list/69322.java
    Persistable p = (Persistable)cliente
    private void FazerOperacaPara(Cliente cliente)
    {
    this.cliente = cliente;
    Persistable p = (Persistable)cliente
    [color=red]this.cliente_ID = p.ID;[/color]}

[color=#444444][/color]

2)Eu pensei que como Cliente nao era concreto ele nao poderia usar ID que uma caracteristica da persistencia. Mas acho que com a opcao de Persistable p = (Persistable)cliente que vc me deu, consigo resolver.

3)Pois é, mesmo que com Persistable p = (Persistable)cliente se resolva o problema eu fico em duvida: posso persistir uma interface ou um obj abstrato, isso seria comum? ou seria uma opção tipo gambiarra? estou tentando fazer o mais adequado. Se eu tiver que refazer td novamente vou fazer para ficar o mais coerente.

Acho q o mais sençato seria, abstratir Cliente em uma classe. assim como vc comenta em http://www.guj.com.br/posts/list/69322.java. Inclusive nesse topico do mais informações sobre o objetivo dessas classes.

Muito obrigado mesmo.

Criado 2 de outubro de 2007
Ultima resposta 3 de out. de 2007
Respostas 2
Participantes 2