Padrões de desenvolvimento JSF

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

[code]@Entity
public Usuario {
private String nome;

}[/code]

public MeuBean {
  private Usuario usuario = new Usuario();

}
#{meuBean.usuario.nome}

Gosto da terceira abordagem.

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

tambem achei muito interessante, vou acompanhar

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:

[quote=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: [/quote]

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

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

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.

[quote=raf4ever][quote=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: [/quote]

Como seria esse Handler e qual a função dele?[/quote]

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

[quote=Eduardo Bregaida][quote=raf4ever][quote=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: [/quote]

Como seria esse Handler e qual a função dele?[/quote]

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

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

Uso a terceira abordagem.

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??

[quote=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??[/quote]

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

[quote=raf4ever]
Services quando são necessários(não como meros delegates),ou DAO’s sendo injetados pelo Spring acessando diretamente o controller.[/quote]
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 ?

[quote=alves.Felipe][quote=raf4ever]
Services quando são necessários(não como meros delegates),ou DAO’s sendo injetados pelo Spring acessando diretamente o controller.[/quote]
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 ?[/quote]

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

Ficaria assim então as classes?[code]
PedidoMB

PedidoNegocio (validações)
Pedido (entidade)

PedidoDao[/code]
e se tiver usando Spring para injetar as dependências, meu PedidoNegocio estaria definido como Service?

[quote=alves.Felipe]Ficaria assim então as classes?[code]
PedidoMB

PedidoNegocio (validações)
Pedido (entidade)

PedidoDao[/code]
e se tiver usando Spring para injetar as dependências, meu PedidoNegocio estaria definido como Service?
[/quote]

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.

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.

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.

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

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