| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2009 12:01:51
|
diegocharles
JavaChild
![[Avatar]](/images/avatar/0f27c12b5d79ce8419764f71ac4ba499.jpg)
Membro desde: 05/03/2009 11:48:40
Mensagens: 114
Localização: Marília / SP
Offline
|
Pessoal, estou iniciando um sistema em Java, e estou com uma dúvida em relação a OO:
-- Eu estou fazendo um módulo de Usuarios que acessarao o sistema, entao obvimente, preciso de um método autentica() (usei esse nome no meu projeto). Esse método compara o que foi digitado pelo usuário, com o devido registro no BD. Agora vem a dúvida, eu devo criar esse método dentro do meu UsuarioDao (Persistencia), ou dentro de Usuario (Entidade) ?
Na segunda opção, eu devo dar um import do meu DAO para poder listar os usuarios no BD, e entao fazer a devida comparação dentro da Entidade ? O que seria correto fazer, levando em conta que os dois jeitos acho que funcionariam, porem apenas um seria o correto dentro do contexto da OO.
OBS: estou desenvolvendo para plataforma WEB, usando MVC.
Obrigado
|
Sistemas de Informação 2009 - Univem Marília/SP
WebLine Sistemas www.weblinesistemas.com
Java'n Linux Lover
 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2009 12:05:08
|
Jair Rillo Junior
Moderador
![[Avatar]](/images/avatar/31b3b31a1c2f8a370206f111127c0dbd.jpg)
Membro desde: 29/04/2003 21:19:53
Mensagens: 2524
Localização: São Paulo / Campinas
Offline
|
Diego,
Embora fuja um pouco do conceito de OO, o mais comum é você criar o método no seu DAO. Suas entidades serão simples POJOs.
|
Jair Rillo Junior
http://www.jairrillo.com/blog | Twitter | SCJA, SCJP, SCWCD, SCBCD, IBM SOA Associate |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2009 12:22:31
|
diegocharles
JavaChild
![[Avatar]](/images/avatar/0f27c12b5d79ce8419764f71ac4ba499.jpg)
Membro desde: 05/03/2009 11:48:40
Mensagens: 114
Localização: Marília / SP
Offline
|
Certo. Mas isso nao atrapalha a manutencao do sistema futuramente, se outro programador entra na equipe por exemplo ? Isso esta de acordo com os padrões do Java ?
|
Sistemas de Informação 2009 - Univem Marília/SP
WebLine Sistemas www.weblinesistemas.com
Java'n Linux Lover
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2009 12:46:44
|
Jair Rillo Junior
Moderador
![[Avatar]](/images/avatar/31b3b31a1c2f8a370206f111127c0dbd.jpg)
Membro desde: 29/04/2003 21:19:53
Mensagens: 2524
Localização: São Paulo / Campinas
Offline
|
diegocharles wrote: Certo. Mas isso nao atrapalha a manutencao do sistema futuramente, se outro programador entra na equipe por exemplo ? Isso esta de acordo com os padrões do Java ?
Isso é padrão, principalmente quando uso algum framework de persistência como Hibernate ou JPA, pode ficar tranquilo
|
Jair Rillo Junior
http://www.jairrillo.com/blog | Twitter | SCJA, SCJP, SCWCD, SCBCD, IBM SOA Associate |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2009 12:52:38
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
Na minha opinião vc deveria fazer assim...
no sua entidade vc pode ter um método simples de autenticar... algo assim
o seu DAO fica sem nada do tipo como autenticar...
vc pode ter 1 controlador, outro, que faça esse tipo de coisa pra vc, sem ser no DAO... algo assim
Agora no seu sistema, vc pode ao receber login e senha fazer algo como
...........
eu prefiro manter minhas entidades com um pouco de logica, nada de mais, só o que for inerente a ela propria... e não colocaria logica no DAO não, so ferramenta de buscas de entidades e essas coisas
This message was edited 5 times. Last update was at 05/03/2009 12:59:14
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2009 22:55:23
|
ffranceschi
JavaChild
![[Avatar]](/images/avatar/c80bfa00454a7564c07c0559808294fa.jpg)
Membro desde: 23/08/2006 11:07:21
Mensagens: 130
Offline
|
Talvez sua dúvida não seja especificamente de OO e sim de separar as responsabilidades de cada camada na sua aplicação (separation of concerns). As duas soluções acimas vão funcionar, mas qual será mais fácil de manter?
Eu usaria uma outra maneira de fazer isso (nao estou pensando apenas em autenticação, estou generalizando um pouco mais)
Criaria um serviço de usuario que teria um metodo de autenticar, que usaria um repositorio para acessar os dados do banco e validar caso for necessário, porque se achou registro no banco é porque o usuario existe.
Agora justificando porque nao usaria as outras soluções acima, lembrando que estou generalizando um pouco mais:
1. Validar no DAO
Acho que a camada DAO fica sendo pra infra-estrutura, aí que entra o "separation of concerns". Imagina colocar regra de autenticação lá. voce com um OracleDAO, se trocar o banco vai ter que reescrever a validação identica?
2. Autenticar pela classe "AutenticadorDeLogin" acima
Métodos estáticos "soa" uma programação procedural. Voce acaba caindo num padrão do tipo Active Record ( http://martinfowler.com/eaaCatalog/activeRecord.html ). Você no fundo acaba tendo dores de cabeça pra testar esses métodos. Tamos num projeto em que começamos com Active Record e tiramos tudo, e nisso foi bastante código jogado fora e ganhamos facilidades de teste
Bom essa é minha opinião, pode ter coisas nessas duas maneiras de fazer que não vi
Abraços
|
Fernando Franceschi
Blog - http://ffranceschi.wordpress.com/
Twitter - http://twitter.com/ffranceschi1 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2009 09:14:12
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
diegocharles wrote:Pessoal, estou iniciando um sistema em Java, e estou com uma dúvida em relação a OO:
-- Eu estou fazendo um módulo de Usuarios que acessarao o sistema, entao obvimente, preciso de um método autentica() (usei esse nome no meu projeto). Esse método compara o que foi digitado pelo usuário, com o devido registro no BD. Agora vem a dúvida, eu devo criar esse método dentro do meu UsuarioDao (Persistencia), ou dentro de Usuario (Entidade) ?
Nenhum dos dois. "obviamente preciso de um método autentica" é otima.
Autenticação é um processo. Vc precisa das credenciais do usuário ( nome, password ) e precisa que alguem faça a verificação.
Esse alguem não pode ser o usuário. O usuário não pode se auto-autenticar. Isso é absurdo.
A autenticação não é um processo ligado a banco de dados. (pode ser, e no seu caso é, mas no caso geral não é) , logo o DAO não tem nada a haver com isso.
O que vc precisa é de um serviço de autenticação que verifica que o usuário tem aquelas credenciais.
Como o serviço faz essa identificação é um detalhe de implementação, mas o serviço tem que ser algo separado do usuario e do dao.
Se a autenticação é correta o método simplesmente passa. Se não ele lança exceção.
É comum que este método retorna o usuário do banco, ma isso deve ser feito com cuidado.
Apenas se o usuário é válido ele pode ser autenticado.
Outras operações durante a autenticação consistem em autorgar permissões ao usuário conforme a autenticação.
Por exemplo se o usuário forneceu a super-password ele tem permissões especiais. Se forneceu apenas a password normal tem permissões limitadas. Se forneceu as duas, tem todas as pemrissões
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
|
|