[Dúvida] TableModel na Arquitetura MVC! [RESOLVIDO]

Olá, galera do fórum!
Tudo bem?

Bom, estou com meu grupo desenvolvendo nosso TCC.
Foi imposto que, na arquitetura MVC que usaremos, “a View não pode enxergar objetos POJO”.

Beleza… Para solucionar isso, eu faço uso de TableModels.
Mas aí que tá a questão… Onde entrariam as TableModels? Em qual pacote se encaixariam melhor?

As Views fazem uso das TableModels.
As minhas TableModels chamam os respectivos Controllers.
Os Controllers fazem uso dos Services, e assim por diante.

Seria melhor criar um pacote separado para as TableModels?
Se sim, onde colocar esse pacote?
Se não, onde seria melhor colocá-las?

Desde já, grato pela ajuda! :smiley:

O tablemodel é uma classe de controle. Ele trata os dados vindos do usuário, e dá a view uma representação da camada de negócio.

[quote]Mas aí que tá a questão… Onde entrariam as TableModels? Em qual pacote se encaixariam melhor?

As Views fazem uso das TableModels.
As minhas TableModels chamam os respectivos Controllers.
Os Controllers fazem uso dos Services, e assim por diante.

Seria melhor criar um pacote separado para as TableModels?
Se sim, onde colocar esse pacote?
Se não, onde seria melhor colocá-las? [/quote]

Bom, eu usaria o table model como “retorno do controller”. E o controller seria chamado por algum evento da tua JTable(ou de outro componente de tela), e não usar ele dentro do TableModel, como você disse.

E eu colocaria os TableModels em um pacote separado dentro da apresentação (pacote view, gui ou qualquer outro nome dado). Porque caso você mude o tipo de apresentação, ele não vai fazer mais sentido, e seria “descartado” junto com o pacote apresentação.

Opa, Pozzo!
Vamos supor então que haja o seguinte código…
Há uma View, com um botão chamado “Inserir”, onde este tem um evento, o qual chama o método “inserirRegistro” da minha TableModel.

private class ButtonInserir implements ActionListener {
   public void actionPerformed(ActionEvent e) {
      
      Map<String, Object> contato = new HashMap<String, Object>();
      contato.put( "nome", textNome.getText() );
      contato.put( "email", textEmail.getText() );
      
      tableModel.inserirRegistro( contato );
   }
}

Na minha TableModel, tem o método inserirRegistro:

public void inserirRegistro( Map<String, Object> contato ) {
   
   Contato anContato = new Contato();
           anContato.setUsuario( contato.get("usuario") != null ? contato.get("usuario").toString() : "" );
           anContato.setEmail( contato.get("email") != null ? contato.get("email").toString() : "" );
   
   this.contatos.add( anContato );  // lista de controle dos dados.
   ContatoAction.getInstance().inserirRegistro( anContato ); // AQUI É A CHAMADA DO CONTROLLER!

   this.fireTableRowsInserted( this.contatos.size(), this.contatos.size() );
}

Nessa sua visão, como ficaria toda essa comunicação, por exemplo?
Valeu :slight_smile:

Nicolas, eu chamaria o método “inserirRegistro” direto no evento do listener “ButtonInserir”, retornaria o Contato inserido na base e adicionaria esse retorno no custom table model, através de um método “addContato”.

Bom, a forma que você fez me parece legal também. A minha forma é mais um “costume meu”.

[quote=pozzo]
E eu colocaria os TableModels em um pacote separado dentro da apresentação (pacote view, gui ou qualquer outro nome dado). Porque caso você mude o tipo de apresentação, ele não vai fazer mais sentido, e seria “descartado” junto com o pacote apresentação.[/quote]

Com relação a colocar os TableModels em um pacote View, acho que não seria viável no quesito “descartá-los”.
O TableModel representa dos dados lidos de um BD, por exemplo.
Então, um TableModel para uma classe POJO Contato deve ser válido para todo e qualquer formulário onde esteja trabalhando com Contatos, certo?
Porque você excluiria os TableModels?

Grato pela opinião :smiley:

O que eu quis dizer em “mudar a view” é, na verdade, mudar de plataforma. Por exemplo, de Desktop (que é o teu caso) para Web. Como você pretende reaproveitar o TableModel na web?

Realmente, não tem nexo!
hehehe

Obrigado pela opinião!
Consegui me decidir já! :smiley:

o//