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!