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 = cliente.ID //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.
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.
[quote=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.[/quote]
- 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.