[RESOLVIDO] Como um interage com outro?

Olá pessoal do fórum… sou nova aqui no fórum e estudo Java Swing para desktop (não conheço Java Web) a mais ou menos um ano e meio de forma amadora, autodidata.

E tenho uma dúvida que vem me atrapalhando, vou tentar explicá-la: Estou fazendo uma agenda para guardar as informações das pessoas que precisarei me comunicar futuramente.
Já consegui identificar que preciso fazer os objetos Pessoa, E-mail e Telefone. Não sei se é o termo certo, mas preciso criar três “Bean” para cada um, correto? Até aqui tudo bem.
Então faço a classe com a tela com os campos para que eu possa informar os dados (ou seja, preencher os bean’s). Legal, até aqui também está certo.
Agora vem o “probleminha”: Depois de ter a tela pronta, digitarei todos os dados e clicarei no botão cadastrar. Esses dados, então, sairão da tela e serão armazenados em cada bean especifico (dados como nome e sobrenome vão para Pessoa, dados de ddd e número vão para Telefone,…). Uma amiga me alertou que não é correto misturar tela com bean’s (instanciar os bean’s na classe da tela) sendo que devo fazer uma classe intermediária que faz essa ligação entre um e outro (tela e bean’s). Ela também aconselhou-me a estudar uma teoria de camadas e lendo realmente percebi que é isso o que acontece, ou seja, existe uma classe “central” que repassa os dados da tela para o bean e vice-e-versa.

Minha pergunta (acredito eu) seja simples aos olhos de quem vê: Essa classe do meio só tem a função de instanciar a tela e os bean’s que receberão os dados e mais nada? E se eu quiser guardar esses dados em um banco, essa classe intermediária é quem será responsável em chamar a classe do banco ou isso ou aí já é responsabilidade do bean? Gostaria de saber se realmente estou fazendo a melhor escolha para construir a agenda?

Obrigada a todos… :smiley:

Olá moça tudo bom? Voce nao precisa criar tres classes (Nome, Telefone…e por ai vai)…

Esses atributos vc pode deixar em uma classe “Pessoa”, sobre a classe intermediaria esta sera seu “Controller”, onde vc vai criar métodos que interaja com sua classe “Pessoa”, e no evento do botão cadastrar vc vai chamar seu método de cadastroPessoa(String nome, String telefone), e nesse metodo vc vai instanciar a classe Pessoa setando esses atributos, e guardando os objetos em um List por exemplo.

sim vc precisa de 3 classes sim

[code]Pessoa

private List<Telefone> telefones
private List<Email> emails

[/code]

realmente é ideal q se tenha 1 classe controler

sua função é capturar os eventos da VIEW, e repassar ao processos corretos…

manipulação do banco de dados não deve ficar nos beans

Lavieri um objeto pessoa não contém, NOME, ENDEREÇO, TELEFONE, EMAIL?

contem 1 nome

porem contem Vários Endereços Telefones e Emails

Email pode ate ser uma String, mas deve ser dar preferencia a objetos que realmente representem o modelo.

e mesmo que só contenha um endereço, ele deve ser um objeto, com logradouro, numero, bairro, cep, bairro

telefone tem DDD, DDI, Numero, opicionalmente tem ramais

enfim e assim vai

Pra que criar esse tanto de classe?
Não há necessidade…
Cria um classe chamada pessoa, com telefone, endereço, etc

[quote=pedroroxd]Pra que criar esse tanto de classe?
Não há necessidade…
Cria um classe chamada pessoa, com telefone, endereço, etc[/quote]

faria do mesmo jeito…

Obrigada Everton e Lavieri por estarem ajudando colaborando com o tópico! :smiley:

[quote=Lavieri]
sua função é capturar os eventos da VIEW, e repassar ao processos corretos…

manipulação do banco de dados não deve ficar nos beans[/quote]

O que seriam os processos corretos? Os bean’s?
E quem chama a classe de manipulação do banco de dados?

Obrigada mais uma vez meninos! Fico no aguardo.

Olá Pedro!

[quote=pedroroxd]Pra que criar esse tanto de classe?
Não há necessidade…
Cria um classe chamada pessoa, com telefone, endereço, etc[/quote]

Então acho que o Lavieri esteja certo porque se uma pessoa da minha agenda tiver um monte de números de celulares, trabalho, etc…
Mas obrigada por tentar ajudar buscando facilitar… espero que continue atento ao tópico. :wink:

cada 1 faz o q acha melhor…

mas se um dia, vc estiver no projeto real, e ai o cara pedir: “Ó, naquele formulário onde tem ali 1 telefone, tem como por um celular ?”

ai vc vai na classe Pessoa e coloca um campo celular ?

ai depois o cara pede, “querido, tem gente que tem mais de 1 e-mail gostaria que vc registrasse todos os emails que a pessoa quiser colocar” … e ai ? vai ficar fazer o q ?

depois ele fala, “Filho precisamos abranger e registrar gente de outros estados… pra isso precisa registrar com dds difernetes, por favor incllui isso”

ai vc vai e … coloca novas propriedades… ddd_telefone, ddd_celular

ai ele manda, ó tem gente que tem 2 celulares, quero que ele possa registrar quantos telefones quiser

e ai ? vai ter q mudar sua lógica em todo canto, pois vai ter q tirar o telefone de dentro da pessoa…

isso são só alguns exemplos, o fato de fazer isso no inicio épra modelar direito, pra não sofrer no futuro… acha que nunca vai usar DDD ? nem DDI ? acha que nunca terá mais de um telefone ? acha que nunca vão te pedir pra registrar mais de um endereço pra 1 mesma pessoa ?

minimize seus problemas, pense logo tudo no inicio…

1 Pessoa é uma Pessoa
1 telefone é um telefone
1 email é um email
1 endereço é um endereço

não há sentido de fingir que tudo é uma pessoa quando não é

A pessoa tem algumas caracteristicas… vc coloca no objeto as relevantes, normalmente, Nome, Cpf, Nacionalidade, coisas que são inerentes a pessoa…

já Telefone, não é uma caracteristica da pessoa… então deve ter sua classe

O mesmo para endereço, email, e outras classes do tipo

Prefira a composição, não saia enfiando dentro de um objeto o que a ele não pertence

o normal é assim

public class Pessoa { private Integer id; //isso não faz parte do moelo, é pra uso qando se meche com banco de dados. private String nome; private String cpf; //pode ser também private Cpf cpf; private List<Endereco> enderecos; private List<Email> emails; private List<Telefone> telefones; private Cidade nacionalidade; }

public class Endereco { private Integer id; //não pertence ao modelo private String logradouro; private String numero; //número é um string pq nem sempre só contem números, por exemplo "S/N" private Bairro bairro; private String cep; private String complemento; }

public class Bairro { private Long id; //não pertence ao modelo private String nome; private String abreviacao; private Cidade cidade; //cidade segue a mesma logica, tendo um stado }

public class Telefone { private Integer ddi = 55; //quase sempre o ddi é 55 (brasil) private Integer ddd = 83; //pode colocar o padrao o do seu estado. private String numero; private String ramal; //opicional claro private TelefoneTipo tipo; //um enum com os tipos de telefone }

public enum TelefoneTipo { CELULAR, FIXO; //etc pode ter outro tipos }

enfim por ai vai

Bom vou da uma resumida!

Você vai criar uma Classe chamada DADOS PESSOAIS com as variáveis desejadas ex:“nome,endereço.telefone,e-mail” e fazer o GET e SET de cada variável!
Vai criar o FORM por os campos e etc…!
Criar uma classe de conexão também!

vlw

[quote=UMC]Bom vou da uma resumida!

Você vai criar uma Classe chamada DADOS PESSOAIS com as variáveis desejadas ex:“nome,endereço.telefone,e-mail” e fazer o GET e SET de cada variável!
Vai criar o FORM por os campos e etc…!
Criar uma classe de conexão também!

vlw[/quote]
Foi o que eu sugeri…
Mas veio o espírito de porco (zuera), e deu a idéia de que uma pessoa poderia ter 2 telefones, 2 emails, e tal…
Ae teria que ser feito várias classes…

[quote=pedroroxd][quote=UMC]Bom vou da uma resumida!

Você vai criar uma Classe chamada DADOS PESSOAIS com as variáveis desejadas ex:“nome,endereço.telefone,e-mail” e fazer o GET e SET de cada variável!
Vai criar o FORM por os campos e etc…!
Criar uma classe de conexão também!

vlw[/quote]
Foi o que eu sugeri…
Mas veio o espírito de porco (zuera), e deu a idéia de que uma pessoa poderia ter 2 telefones, 2 emails, e tal…
Ae teria que ser feito várias classes…[/quote]

Bom a mocinha “dona do tópico” está com uma dificuldade básica! NORMAL para início!
fazer várias classes “FALA sério!”
Vai bagunçar tudo!

vlw

Concordo plenamente…
Para mim seria a classe Pessoa com get’s e set’s

[quote=pedroroxd]Concordo plenamente…
Para mim seria a classe Pessoa com get’s e set’s[/quote]
Isso ae!!

vlw

[quote=ingridfarabulini]Obrigada Everton e Lavieri por estarem ajudando colaborando com o tópico! :smiley:

[quote=Lavieri]
sua função é capturar os eventos da VIEW, e repassar ao processos corretos…

manipulação do banco de dados não deve ficar nos beans[/quote]

O que seriam os processos corretos? Os bean’s?
E quem chama a classe de manipulação do banco de dados?

Obrigada mais uma vez meninos! Fico no aguardo.[/quote]

assim

vc poem um controlador como Ouvinte do botão…

quando o botão é clicado, o Controlador, pega os dados do formulario, popula um Bean com os dados (isso se os dados já não estiverem em um bean)

ai esse controlador deve ter o papel, de saber quem é o responsável por guardar os beans em um banco de dados (Normalmente esse bean é chamado de entity, por ser possivel persitilo em um banco) e normalmente esse objeto, no inicio é um DAO (Data Access Object) que conhece como conversar como banco, e é responsavel por guardalo no banco…

Então resumindo…

Swing, responsavel pela exibição, e por receber os dados atraves da VIEW.

COntroller, responsável por entermediar o que vem da VIEW, e repassar para lógicas responsáveis pelo processo

por exemplo

public class Controller implements EventoQualquerListener{ //ou seja escuta um evento qualquer da view public void eventoQualquer(EventoOcorrido evento, Object source) { //aqui vc tem q pegar o bean do source, e passar ele pra um lógica //algo como Pessoa p = new Pessoa(); p.setNome(source.getLocalOndeGuardaNome().getText()); //e depois de estar com o bean OK PessoaDao dao = //pega o pessoa dao dao.save(pessoa); } }

quanto mais desacomplado, ou seja, quanto menos operações tiver dentor do Controller melhor… ele deve simplismente pegar o que esta na VIEW (no swing) e repassar para a lógica… normalmente a lógica não é um DAO… e sim um objeto que tem toda a lógica que deve ocorrer ao ser enviado um bean…

ai é esse objeto

Olá Lavieri, entendi sua explicação ficou bem clara!

Nesse caso então a classe Pessoa vai ter um método de cadastrar no qual irá receber os dados também de telefone, e-mail,…
Ex:

public void cadastrarPessoa(String nome, String sobrenome, Telefone tel, Email mail) {
  //...
}

Seria isso?
Também ainda estou com a dúvida da sua primeira resposta lá em cima… e que foram muitas respostas acho que passou despercebida minha dúvida…
Obrigado por estar me ajudando… espero que continue aqui no tópico. :wink:

[quote=UMC][quote=pedroroxd][quote=UMC]Bom vou da uma resumida!

Você vai criar uma Classe chamada DADOS PESSOAIS com as variáveis desejadas ex:“nome,endereço.telefone,e-mail” e fazer o GET e SET de cada variável!
Vai criar o FORM por os campos e etc…!
Criar uma classe de conexão também!

vlw[/quote]
Foi o que eu sugeri…
Mas veio o espírito de porco (zuera), e deu a idéia de que uma pessoa poderia ter 2 telefones, 2 emails, e tal…
Ae teria que ser feito várias classes…[/quote]

Bom a mocinha “dona do tópico” está com uma dificuldade básica! NORMAL para início!
fazer várias classes “FALA sério!”
Vai bagunçar tudo!

vlw[/quote]

e do inicio que se começa a fazer tudo errado …

Começar a programar errado, vai dar problema depois… é mais que provado, se perde mais tempo com manutenção com desenvolvimento… e o motivo são ideis simplistas como colocar 1092389238 dados dentro de um classe onde deveriam estar corretamente encapsuladas…

Vou dar outro exemplo

Pessoa com campos de endereço dentro dela…

ai vc tem um Forncedor com seus campos de endereços dentro dela… ai vc quer fazer uma mala direta para pegar os endereços… e ai vem a encrenca…

vai ter q criar 2 lógicas, uma pra Pessoa outra pra fornecedor, pois cada um tem seus proprios endereços…

No mundo real é assim que acontece… alguem te pede algo, vc pensa simples, monta o sistema todinho, ai vc passa pro cara o programa, ele nunca falou nada de 2 teleofnes… mas assim q inicia, um usuario sente falta, e já reclama pede pra vc mudar… e uma coisa besta, como ter 2 telefones, faz vc alterar dezenas e dezenas de linhas de código, que antes buscavam o telefone diretamente na pessoa, e não em um objeto proprio…

[quote=UMC][quote=pedroroxd][quote=UMC]Bom vou da uma resumida!

Você vai criar uma Classe chamada DADOS PESSOAIS com as variáveis desejadas ex:“nome,endereço.telefone,e-mail” e fazer o GET e SET de cada variável!
Vai criar o FORM por os campos e etc…!
Criar uma classe de conexão também!

vlw[/quote]
Foi o que eu sugeri…
Mas veio o espírito de porco (zuera), e deu a idéia de que uma pessoa poderia ter 2 telefones, 2 emails, e tal…
Ae teria que ser feito várias classes…[/quote]

Bom a mocinha “dona do tópico” está com uma dificuldade básica! NORMAL para início!
fazer várias classes “FALA sério!”
Vai bagunçar tudo!

vlw[/quote]

Olá UMC, obrigada por estar tentando ajudar!
Mas sinceramente essa divisão de classes eu já havia aprendido… Na minha opinião, me desculpa eu discordar da sua, mas realmente se torna necessário criá-las!
Aqui mesmo na minha agenda do telefone tem algumas pessoas que tem mais de um número (para ser sincera, quase todos :D)…
Volto a agradecer por estar tentando ajudar facilitando, ok? Não fica chateado.