Olá !
Estou para montar uma aplicação e uma das coisas que haverá é a autenticação de usuários.
Como não é nada elegante - e funcional - meter lá na classe Usuario o campo login,senha - pensei no seguinte:
classe Usuario - atributos do usuário e sua relação no sistema
classe Login - dados para autenticação
classe FoobarAutenticador - haveria métodos - a principio 1 só - para autenticação deste usuário
Resumidamente seria: FoobarAutenticador.autentica(Login) : Usuario
Tenta encontrar o usuário com o objeto Login, caso o encontre, retorna o Usuario com suas devidas informações para as camadas superiores.
Neste caso o FoobarAutenticador atuaria como uma espécie de Serviço - juro que eu consigo vê-lo também como uma Facade, não sei…
Depois que estive vendo o livro do Fowler onde ele diz que - particularmente não gosta de Services, mesmo não tendo nada contra - fiquei a pensar em como eu poderia melhor desenhar as aplicações evitando ao máximo os Services.
Desta forma que você colocou eu estaria evitando aquele ciclo: Entidade; Service.metodo(recebeEntidade) : retornaEntidade.
Diga-me uma coisa: porque optou por fazer do autenticador uma variável de instância de Usuario ? Não poderia simplemente instanciá-la no Usuario.login() e um abraço ?
Depois que estive vendo o livro do Fowler onde ele diz que - particularmente não gosta de Services, mesmo não tendo nada contra - fiquei a pensar em como eu poderia melhor desenhar as aplicações evitando ao máximo os Services.
Desta forma que você colocou eu estaria evitando aquele ciclo: Entidade; Service.metodo(recebeEntidade) : retornaEntidade.
Diga-me uma coisa: porque optou por fazer do autenticador uma variável de instância de Usuario ? Não poderia simplemente instanciá-la no Usuario.login() e um abraço ?
Valeu ![/quote]
Services podem até ser úteis, desde que bem utilizados em seus casos específicos.
Deixar o autenticador como membro da classe te permite utilizar outros métodos específicos dele em outras parte da classe Usuario.
Apenas como mero exemplo, imagine a classe Usuario como segue:
Se voce deixar para instanciar o autenticador dentro do método login() por exemplo, teria que criar uma nova instancia dentro do método logout().
Fazendo assim, voce pode perfeitamente reutilizar seus objetos.