| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 20:59:21
|
spinow
Thread.start()
![[Avatar]](/images/avatar/92a84c7a19445c97460b85315fae84d5.png)
Membro desde: 16/07/2009 20:00:33
Mensagens: 27
Offline
|
Olá a todos,
Já existem vários tópicos sobre esse padrão de projeto, eu sei, mas minha dúvida é um pouco mais específica.
Bom, primeiro vai o código.
Tenho assim o meu Abstract Factory:
Bom, primeiro, como existem aqui vários experts no assunto, gostaria de saber se consegui assimilar o padrão, segundo, e principal, diz respeito a utilizaçao por parte do cliente:
É correto o método "create()" retornar a classe abstrata (Usuario)? Acho estranho, pois, assim teria que fazer um cast toda hora, até pq UsuarioFisico tem o método getCpf(), no qual não existe, obviamente no UsuarioJuridico...
Opinem, por favor...
Obrigado!
This message was edited 2 times. Last update was at 14/01/2010 21:02:30
|
powered by  |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/01/2010 09:12:59
|
pozzo
JavaEvangelist
Membro desde: 08/04/2006 11:07:20
Mensagens: 331
Localização: Curitiba
Offline
|
É assim mesmo, a aplicação não deve saber qual o tipo de factory usada ou objeto retornado. O que importa é que o 'tipo certo' seja retornado.
Bom, neste caso você vai ter que fazer cast. Pois o método getCpf não existe em UsuarioJuridico. Mas veja que fica mais interessante quando você tem métodos sobrescritos, e em tempo de execução, é decidido qual executar.
This message was edited 1 time. Last update was at 15/01/2010 09:13:43
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/01/2010 16:50:38
|
asaudate
GUJ Master
![[Avatar]](/images/avatar/974e2945a18e0bfb8e3aa8becac3e65c.jpg)
Membro desde: 01/09/2007 19:31:41
Mensagens: 1660
Localização: São Paulo
Offline
|
spinow wrote:Olá a todos,
Já existem vários tópicos sobre esse padrão de projeto, eu sei, mas minha dúvida é um pouco mais específica.
Bom, primeiro vai o código.
Tenho assim o meu Abstract Factory:
Bom, primeiro, como existem aqui vários experts no assunto, gostaria de saber se consegui assimilar o padrão, segundo, e principal, diz respeito a utilizaçao por parte do cliente:
É correto o método "create()" retornar a classe abstrata (Usuario)? Acho estranho, pois, assim teria que fazer um cast toda hora, até pq UsuarioFisico tem o método getCpf(), no qual não existe, obviamente no UsuarioJuridico...
Opinem, por favor...
Obrigado!
Está quase lá... o seu método getInstance() está meio "complicado", porque se o cliente sabe que Usuário quer, como nessa linha:
então não tem porque usar factory, concorda?
Nesse caso (especificamente), eu diria a você criar um mapa com o input e atrelar às instâncias de factory que você quer. Por exemplo:
Assim, você anexa o input de acordo com a Factory, mas se ficar tudo na mesma classe, não tem problema.
Quanto ao caso do método getCpf, você poderia fazer um esquema semelhante de classes abstratas, mas com os usuários. Substitua getCpf() por getDocumento, que fica numa interface (evite usar herança!) e substitua o método na sua classe Factory, tb.
[]´s
This message was edited 2 times. Last update was at 16/01/2010 15:05:05
|
Alexandre Saudate
__________________________
Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.
Série quickstart: Spring+Spring Security+Jersey+Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate
Precisa de uma ferramenta boa para web services, mas está cansado das ferramentas tradicionais? #Banshee
Evite usar Axis2!!! Leia aqui para mais detalhes!
@alesaudate
Quer ler um blog especializado em web services e SOA?
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 09:47:41
|
spinow
Thread.start()
![[Avatar]](/images/avatar/92a84c7a19445c97460b85315fae84d5.png)
Membro desde: 16/07/2009 20:00:33
Mensagens: 27
Offline
|
Está quase lá... o seu método getInstance() está meio "complicado", porque se o cliente sabe que Usuário quer, como nessa linha:
Tem toda a razão... realmente fugiu da idéia da utilização do padrão... Curti a idéia de passar o input, massa mesmo!
Substitua getCpf() por getDocumento
Ótima alternativa tbm! Valew pela ajuda de todos!
This message was edited 1 time. Last update was at 26/01/2010 09:49:45
|
powered by  |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 10:06:11
|
mario.fts
GUJ Ranger
![[Avatar]](/images/avatar/9e96d422fba85185a33829439f5df09d.jpg)
Membro desde: 14/05/2008 09:41:06
Mensagens: 809
Localização: São Paulo - ZL
Offline
|
Eu prefiro algo do tipo:
Assim não precisa saber as flags, os nomes dos métodos já deixam claro o que será retornado.
This message was edited 1 time. Last update was at 26/01/2010 10:06:33
|
Mário Amaral Gonçalves
"Ciência da computação tem tanto a ver com o computador como a Astronomia com o telescópio, a Biologia com o microscópio, ou a Química com os tubos de ensaio. A Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas." - Edsger Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 10:17:44
|
Leonardo3001
GUJ Ranger
Membro desde: 04/07/2007 18:28:58
Mensagens: 975
Offline
|
mario.fts wrote:Eu prefiro algo do tipo:
Assim não precisa saber as flags, os nomes dos métodos já deixam claro o que será retornado.
Pode até ser. Mas aí deixaria de ser um Abstract Factory, que é um padrão que abstrai uma família de factories. Afinal, na sua implementação, o cliente sabe qual factory está sendo utilizado, o que não é a intenção.
|
Leonardo Veríssimo
-------------------------------------------------
Objectzilla |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 10:21:35
|
mario.fts
GUJ Ranger
![[Avatar]](/images/avatar/9e96d422fba85185a33829439f5df09d.jpg)
Membro desde: 14/05/2008 09:41:06
Mensagens: 809
Localização: São Paulo - ZL
Offline
|
e passando o flag ele não sabe?
|
Mário Amaral Gonçalves
"Ciência da computação tem tanto a ver com o computador como a Astronomia com o telescópio, a Biologia com o microscópio, ou a Química com os tubos de ensaio. A Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas." - Edsger Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 10:27:15
|
asaudate
GUJ Master
![[Avatar]](/images/avatar/974e2945a18e0bfb8e3aa8becac3e65c.jpg)
Membro desde: 01/09/2007 19:31:41
Mensagens: 1660
Localização: São Paulo
Offline
|
Naquele jeito que eu passei alí em cima, não. Ele só sabe que , de acordo com o input, ele vai retornar uma factory diferente. Acontece que esse input vem do controller, que vem da view... ou seja, vai mudando. Se por acaso a view acrescentar mais valores, por exemplo, é só acrescentar uma entrada no map.
[]´s
|
Alexandre Saudate
__________________________
Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.
Série quickstart: Spring+Spring Security+Jersey+Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate
Precisa de uma ferramenta boa para web services, mas está cansado das ferramentas tradicionais? #Banshee
Evite usar Axis2!!! Leia aqui para mais detalhes!
@alesaudate
Quer ler um blog especializado em web services e SOA?
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 12:53:49
|
spinow
Thread.start()
![[Avatar]](/images/avatar/92a84c7a19445c97460b85315fae84d5.png)
Membro desde: 16/07/2009 20:00:33
Mensagens: 27
Offline
|
Naquele jeito que eu passei alí em cima, não. Ele só sabe que , de acordo com o input, ele vai retornar uma factory diferente. Acontece que esse input vem do controller, que vem da view... ou seja, vai mudando. Se por acaso a view acrescentar mais valores, por exemplo, é só acrescentar uma entrada no map.
Se eu consegui entender a necessidade do padrão Abstract Factory, acredito que esta explicação é bem válida, pois, deixa mais "genérico". Certo?
|
powered by  |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 13:09:22
|
asaudate
GUJ Master
![[Avatar]](/images/avatar/974e2945a18e0bfb8e3aa8becac3e65c.jpg)
Membro desde: 01/09/2007 19:31:41
Mensagens: 1660
Localização: São Paulo
Offline
|
spinow wrote:
Naquele jeito que eu passei alí em cima, não. Ele só sabe que , de acordo com o input, ele vai retornar uma factory diferente. Acontece que esse input vem do controller, que vem da view... ou seja, vai mudando. Se por acaso a view acrescentar mais valores, por exemplo, é só acrescentar uma entrada no map.
Se eu consegui entender a necessidade do padrão Abstract Factory, acredito que esta explicação é bem válida, pois, deixa mais "genérico". Certo?
Certo! Você está deixando de lado a necessidade de saber qual o produto. OK, você está acoplando a entrada com uma factory, mas como eu disse antes, não tem problema se você fizer isso num façade ou coisa assim.
[]´s
|
Alexandre Saudate
__________________________
Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.
Série quickstart: Spring+Spring Security+Jersey+Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate
Precisa de uma ferramenta boa para web services, mas está cansado das ferramentas tradicionais? #Banshee
Evite usar Axis2!!! Leia aqui para mais detalhes!
@alesaudate
Quer ler um blog especializado em web services e SOA?
 |
|
|
 |
|
|