Criar o Objeto inteiro mesmo precisando de apenas 20% dele na hora de gerar a lista?

Ola pessoal
eu tenho uma lista de pessoas, onde, eu preciso mostrar apenas o
ID, Nome,CPF, STATUS

porem, na classe inteira existem mas 10 atributos do pessoa(sexo, estado civil…)
qdo eu criar essa lista, eu crio ela completa?
esse é o correto?

            while (rs.next()) {

                int id 				= rs.getInt(1);
                String nome 		= rs.getString(2);
                String documento 	= rs.getString(3);
                String status 		= rs.getString(4);    
                PessoaFisica pessoaFisica = new PessoaFisica();
                pessoaFisica.setNome(nome);
                pessoaFisica.setId(id);
                pessoaFisica.setCpf(documento);
                pessoaFisica.setStatus(status);
.
.
.
.
.

acho que é so
abs
T+

Acho que você é quem deve responder isso, depende de sua necessidade, se você tem todos os campos no banco para preencher os atributos não faz mal nenhum trazer o objeto completo.

[quote=Krusst]Ola pessoal
eu tenho uma lista de pessoas, onde, eu preciso mostrar apenas o
ID, Nome,CPF, STATUS

porem, na classe inteira existem mas 10 atributos do pessoa(sexo, estado civil…)
qdo eu criar essa lista, eu crio ela completa?
esse é o correto?
[/quote]

“Correcto” é subjetivo. Se vc quiser carregar os 10 atributos e usar todos eles para mostrar 4 ninguem o impede.
Mas como vc percebeu isso não é muito eficiente, é um desperdicio. Então vc pode usar um padrão chamado Flyweight ( peso-mosca). Vc cria uma outra classe - por exemplo PessoFisicaLeight - com apenas os 4 campos e carrega só esses campos. Em opção vc pode criar uma interface que só le esses 4 campos ( so getters) e fazer a classe PessoaFisica implementar essa interface. Depois você usa o mesmo objeto mas carrega apenas os 4 campos que quer e retorna usando a interface. Algo assim :


interface PessoaFisicaLeight {

String    getNome();
// ...
}

class PessoaFisica implements PessoaFisicaLeight {
// codigo normal
}

public PessoaFisicaLeigth getPessoa(){
 return loadPessoa(true);
}

public PessoaFisica getPessoa(){
  return loadPessoa(false);
}

private Pessoafisica loadPessoa(boolean light ){

   if (light){
   // carrega só quatro campos
   } else{
   // carerga todos
}
}

Isto é só para aproveitar a classe que vc já tem. É mais simples criar outra classe.
Mas lembre-se que essa outra classe não pode ser editável. ( dai o uso de interface ajudar)

[quote=sergiotaborda][quote=Krusst]Ola pessoal
eu tenho uma lista de pessoas, onde, eu preciso mostrar apenas o
ID, Nome,CPF, STATUS

porem, na classe inteira existem mas 10 atributos do pessoa(sexo, estado civil…)
qdo eu criar essa lista, eu crio ela completa?
esse é o correto?
[/quote]

“Correcto” é subjetivo. Se vc quiser carregar os 10 atributos e usar todos eles para mostrar 4 ninguem o impede.
Mas como vc percebeu isso não é muito eficiente, é um desperdicio. Então vc pode usar um padrão chamado Flyweight ( peso-mosca). Vc cria uma outra classe - por exemplo PessoFisicaLeight - com apenas os 4 campos e carrega só esses campos. Em opção vc pode criar uma interface que só le esses 4 campos ( so getters) e fazer a classe PessoaFisica implementar essa interface. Depois você usa o mesmo objeto mas carrega apenas os 4 campos que quer e retorna usando a interface. Algo assim :


interface PessoaFisicaLeight {

String    getNome();
// ...
}

class PessoaFisica implements PessoaFisicaLeight {
// codigo normal
}

public PessoaFisicaLeigth getPessoa(){
 return loadPessoa(true);
}

public PessoaFisica getPessoa(){
  return loadPessoa(false);
}

private Pessoafisica loadPessoa(boolean light ){

   if (light){
   // carrega só quatro campos
   } else{
   // carerga todos
}
}

Isto é só para aproveitar a classe que vc já tem. É mais simples criar outra classe.
Mas lembre-se que essa outra classe não pode ser editável. ( dai o uso de interface ajudar) [/quote]

cara
eu entendi, mas nao compreendi
nao entendi como eu faria pra compartilhar os dados das classes com o Flyweight
essa parte que nao entendi como faria
procurei um artigos, porem, nao achei
achei apenas uns exemplos de quadrado,triangulo, retangulo, mas nada “usual” mesmo que me desse uma base

mas obrigado pela dica
abs
T+

o seu codigo


public PessoaFisica (boolean light){
 
// outro codigo ... 
 while (rs.next()) {  
   
                 int id              = rs.getInt(1);  
                 String nome         = rs.getString(2);  
                 String documento    = rs.getString(3);  
                 String status       = rs.getString(4);      
                 PessoaFisica pessoaFisica = new PessoaFisica();  
                 pessoaFisica.setNome(nome);  
                 pessoaFisica.setId(id);  
                 pessoaFisica.setCpf(documento);  
                 pessoaFisica.setStatus(status);  
                 if (!light){
                          pessoaFisica.setOutroCampo(rs.getString(5));  
                          pessoaFisica.setMaisOutroCampo(rs.getString(6));  

                 }
return pessoaFisica;
}

É só isso. Vc decide carregar menos ou mais campos conforme o boolean.

[quote=sergiotaborda][quote=Krusst]
cara
eu entendi, mas nao compreendi
nao entendi como eu faria pra compartilhar os dados das classes com o Flyweight
[/quote]

o seu codigo


public PessoaFisica (boolean light){
 
// outro codigo ... 
 while (rs.next()) {  
   
                 int id              = rs.getInt(1);  
                 String nome         = rs.getString(2);  
                 String documento    = rs.getString(3);  
                 String status       = rs.getString(4);      
                 PessoaFisica pessoaFisica = new PessoaFisica();  
                 pessoaFisica.setNome(nome);  
                 pessoaFisica.setId(id);  
                 pessoaFisica.setCpf(documento);  
                 pessoaFisica.setStatus(status);  
                 if (!light){
                          pessoaFisica.setOutroCampo(rs.getString(5));  
                          pessoaFisica.setMaisOutroCampo(rs.getString(6));  

                 }
return pessoaFisica;
}

É só isso. Vc decide carregar menos ou mais campos conforme o boolean.[/quote]

esta parte eu comprendi
a que nao entendi foi a das classes mesmo

# interface PessoaFisicaLeight {  
#   
# String    getNome();  
# // ...  
# }  
#   
# class PessoaFisica implements PessoaFisicaLeight {  
# // codigo normal  
# }  
#   
# public PessoaFisicaLeigth getPessoa(){  
# return loadPessoa(true);  
# }  
#   
# public PessoaFisica getPessoa(){  
#   return loadPessoa(false);  
# }  
#   
# private Pessoafisica loadPessoa(boolean light ){  
#   
#    if (light){  
#    // carrega só quatro campos  
#    } else{  
#    // carerga todos  
# }  
# } 

esta parte que nao compreendi como fazer as implementacoes para nao ter que criar uma classe nova, tudo do zero, e herdar os dados das outras classes na versao mais light

abs
obrigado