Padrões de desenvolvimento JSF

20 respostas
MauNunes

Gostaria de saber como o pessoal que trabalha com desenvolvimento JSF constuma passar parâmetros da tela para o Manager Bean.

1º)Você costumam setar os atributos direto no Manager Bean?
public MeuBean {
  private String nome;

  // getter e setter

}
#{meuBean.nome}

2º) Criam um objeto DTO para isso?

public MeuBean {
  private UsuarioDTO usuarioDTO = new UsuarioDTO();

}
#{meuBean.usuarioDTO.nome}

3º) Setam esse valores diretamento nas entity criadas

@Entity
public Usuario {
  private String nome;
  
}
public MeuBean {
  private Usuario usuario = new Usuario();

}
#{meuBean.usuario.nome}

20 Respostas

R

Gosto da terceira abordagem.

muldon

tópico interessante, vou acompanhar os geeks em jsf dizerem ai…

Polverini

tambem achei muito interessante, vou acompanhar

Eduardo_Bregaida

Particularmente eu tenho uma entidade pro banco, o DAO, Business, um Bean para a tela aqui ficou padronizado como TO, o Handler e a página.

Tudo separado, no caso uso EJB aqui no trabalho tbm. :smiley:

R

Eduardo Bregaida:
Particularmente eu tenho uma entidade pro banco, o DAO, Business, um Bean para a tela aqui ficou padronizado como TO, o Handler e a página.

Tudo separado, no caso uso EJB aqui no trabalho tbm. :smiley:

Como seria esse Handler e qual a função dele?

gilmaslima

Opção 3 pq geralmente oq está sendo passado vai ou está vindo do banco de dados.

Diabo_Loiro

Geralmente a terceira abordagem.

com JPA voce não nescessita de um DTO.

E geralmente utilizo o pattern enterprise “ViewHelper” para separar a logica do managed bean dos atributos da view.

Eduardo_Bregaida

raf4ever:
Eduardo Bregaida:
Particularmente eu tenho uma entidade pro banco, o DAO, Business, um Bean para a tela aqui ficou padronizado como TO, o Handler e a página.

Tudo separado, no caso uso EJB aqui no trabalho tbm. :smiley:

Como seria esse Handler e qual a função dele?

O Handler é o ManegedBean, no caso ele tem os métodos que minha tela executa. :smiley:

Eduardo_Bregaida

Eduardo Bregaida:
raf4ever:
Eduardo Bregaida:
Particularmente eu tenho uma entidade pro banco, o DAO, Business, um Bean para a tela aqui ficou padronizado como TO, o Handler e a página.

Tudo separado, no caso uso EJB aqui no trabalho tbm. :smiley:

Como seria esse Handler e qual a função dele?

O Handler é o ManegedBean, no caso ele tem os métodos que minha tela executa. :smiley:

O que mata no projeto aqui é não poder usar JPA, pois tudo é procedure executada no DB2 MainFrame… :roll:

malucocelo

Uso a terceira abordagem.

alves.Felipe

eu tb uso a opção 3.
mas complementando a pergunta, seria bom saber o que vcs usam para separar a lógica do managed bean??

R

alves.Felipe:
eu tb uso a opção 3.
mas complementando a pergunta, seria bom saber o que vcs usam para separar a lógica do managed bean??

Services quando são necessários(não como meros delegates),ou DAO’s sendo injetados pelo Spring acessando diretamente o controller.

alves.Felipe

raf4ever:

Services quando são necessários(não como meros delegates),ou DAO’s sendo injetados pelo Spring acessando diretamente o controller.

mas por exemplo. Existe um mb PedidoMB, nele eu tenho um método salvar, porém antes de salvar eu preciso fazer algumas validações:
1- validar prazo do cliente
2- validar limite de crédito do cliente.
3 - mais N validações;
como que ficaria sua arquitetura neste cenário ?

R

alves.Felipe:
raf4ever:

Services quando são necessários(não como meros delegates),ou DAO’s sendo injetados pelo Spring acessando diretamente o controller.

mas por exemplo. Existe um mb PedidoMB, nele eu tenho um método salvar, porém antes de salvar eu preciso fazer algumas validações:
1- validar prazo do cliente
2- validar limite de crédito do cliente.
3 - mais N validações;
como que ficaria sua arquitetura neste cenário ?

Colocaria as validações no model e o MB acessaria.

alves.Felipe
Ficaria assim então as classes?
PedidoMB 
--
PedidoNegocio (validações)
Pedido (entidade)
--
PedidoDao
e se tiver usando Spring para injetar as dependências, meu PedidoNegocio estaria definido como Service?
R
alves.Felipe:
Ficaria assim então as classes?
PedidoMB 
--
PedidoNegocio (validações)
Pedido (entidade)
--
PedidoDao
e se tiver usando Spring para injetar as dependências, meu PedidoNegocio estaria definido como Service?

PedidoNegocio n eh necessaria(as validações podem ficar em Pedido)

E eu anoto todas as classes gerenciadas pelo Spring(controllers,services e daos) como @Component,
não vi na prática a diferença entre usar @Controller,@Service e @Repository.

alves.Felipe

blz tirou minha dúvida, mas acho que fica meio estranho… todas minhas “trocentas” validações na minha entidade.
E tb é certo chamar uma consulta (ClienteDao, por exemplo) de dentro da entidade Pedido ? supondo que eu precise consultar
alguns dados para a minha validação.

MauNunes

Nossa !

Não achei que o tópico geraria tanta discussão.

Minha opnião:

Em relação as 3 forma apresentadas, a que eu constumo usar é a segunda, ou seja criando as classe DTO. O problema dessa solução é que ela gera um certo trabalho, pois quando se vai persistir um objeto é necessário preencher a entity com os valores do DTO.

A segunda forma é uma boa solução, porem exitem telas que os dados a serem preenchidos não fazem parte do modelo e nesse caso a variação da primeira e da segunda forma poderiam ser usadas. O que determina qual forma usar é a quantidade de parâmetros.

R

alves.Felipe:
blz tirou minha dúvida, mas acho que fica meio estranho… todas minhas “trocentas” validações na minha entidade.

Mas não há problema nisso,eh justamente no Model onde as validações devem estar.

altitdb

raf4ever:
alves.Felipe:
blz tirou minha dúvida, mas acho que fica meio estranho… todas minhas “trocentas” validações na minha entidade.

Mas não há problema nisso,eh justamente no Model onde as validações devem estar.

Rafael,

como seriam essas validações nas entidades?

poderia fazer dessas formas?

Forma 1 - Hibernate Validator

@NotNull(message="Campo obrigatório)
private String nome;

Forma 2 - Criando suas proprias exceptions

private Double saldo;

 public void saldo(saldo) {
        if(saldo < 0) {
            throw new MinhaException();
        } else {
            this.saldo = saldo;  
        }
    }
}

Tem mais alguma forma??
Alguma forma recomendada??

Criado 12 de janeiro de 2011
Ultima resposta 13 de jan. de 2011
Respostas 20
Participantes 10