ManagedBeans (JSF) x Value Objects

4 respostas
heatcold

1. É uma boa prática utilizar value objects (vo) dentro de um managed bean? (evitando duplicar os atributos do vo no managed bean)

ex:

CityBean { private CityVO cityVO; private CityService cityService; }
2. outro ponto (que tenho duvida) seria utilizar o managed bean como um controller (validacao de tela / renderizacao) e isolar a camada negocial.
funciona legal?

qual a opiniao de voces?

4 Respostas

God_of_Java

Eu prefiro utilizar todos os atributos, com gets e sets, dentro do bean para economizar linhas de codigo.

Grinvon

1 - O importação é separar bem as coisas, os VOs podem ser controlados em sua grande parte por uma “parte intermediária”, em outros casos, conhecida como DAO ou RN ou BS, a depender da forma como você estruturar. O bean é o controller intermediário entre a aplicação em si e a págia (JSF).

2 - Não. Não gosto muito de concentrar a validação dos models dentro do bean, até por uma questão de desacoplamento. Vamos suporm que você precise dessas mesmas regras para uma outra aplicação, e por acaso, o número de validações é bastante expressivo, o ideal seria alocar essas regras em uma outra classe, de preferência num projeto que possa agrupá-las como libs, mas isso claro, pensando de uma maneira de reutilização para outros projetos.

No caso de reutilização para um mesmo projeto, pode deixá-las numa camada como DAO ao qual o bean1, bean2, beanN tenham acesso. Fica mais organizado e mais fácil de manter o código. Assim como evitará problemas futuros para reaproveitamente das mesmas regras.

heatcold

Um jeito organizado é relacionar cada bean / service à um requisito do sistema.

suponha que voce precisa projetar uma agenda seguindo os requisitos (funcionais) abaixo:
- login (login / logout)
- gerenciamento de usuarios (crud)
- gerenciamento de contatos (crud)

teriamos os seguintes beans:
LoginBean (sessao)
UserBean (requisicao)
ContactBean (requisicao)

e os seguintes serviços (é importante desacoplar o modelo (model) da gui (view)):
LoginService
UserService
ContactService

seguindo esse modelo uma tela utilizaria um ou mais beans.
e cada bean estaria ligado a um (unicamente um) servico.

suponha uma tela de login com os campos usuario e senha:
LoginBean {
    String username;
    String password;
    boolean loggedIn;

    LoginService loginService;

    void login() {
        this.loggedIn = loginService.login(username, password);
     }   
 
    void logout() {
        this.loggedIn = false;
    }
} 

LoginService {
    UserDAO userDAO;

    boolean login(String username, String password) {
        userDAO.read(username, password) != null;
    }
}
Nesse caso, tanto os DAOs quanto os Services seriam injetados utilizando o Spring.

Quanto a utilizar um VO dentro de um managed bean, acho que é interessante utiliza-los
dentros dos metodos (caso necessario) e não como atributo da classe.

Validações de tela / renderização seriam colocadas no Bean.
Regras de negocio (permitindo que qualquer outra GUI seja utilizada) nos Services.

(M)odel: VO, DAO, Services (BACKEND)
(V)iew and (C)ontroler: Bean (FRONTEND)

Na teoria funciona legal. Vamos ver na prática!

Tiburcio_Mancha

huahauahau, maneiro o seu avatar, hauhauhaua

Criado 24 de fevereiro de 2011
Ultima resposta 24 de fev. de 2011
Respostas 4
Participantes 4