Duvidas Pattern Proxy  XML
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Autor Mensagem
xjunior
JavaEvangelist
[Avatar]

Membro desde: 26/08/2009 15:49:19
Mensagens: 321
Localização: Belo Horizonte - MG
Offline

O objetivo na lata do proxy é transformar algo complexo em simples e lembra do proxy em servidor, para que ele serve???

Este design pattern nao possui filosofia diferente, e sim um proxy na empresa (lembrando do servidor...) guarda cache das páginas acessadas, não é? Implementa segurança, e faz com que o acesso seja "mais rápido"...

O design pattern proxy é para fazer o acesso ser mais rápido em algo custoso.... Ter um intermediário entre o complexo e a sua implementação, ok?

acessem um dos melhores foruns de TI: http://www.clubedaprogramacao.com/forum/


Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Offline

acidburn wrote:Tenho uma classe que busca no banco uma imagem muito grande, então crio um proxy desta classe assim posso Instanciar o objeto real pela proxy somente quando necessário asim não alocando a memória antecipadamente
seria isso?


É exatamente isso. Um proxy pode controlar acesso por diversos motivos:
1. Lazy loading (exemplo que você deu);
2. Controle ou restrições de acesso;
3. Sincronização
4. Caching (exemplo dado pelo xjunior);

O proxy não adiciona nenhuma funcionalidade aparente a quem usa a classe. É diferente do decorator, que agrega uma função. Diferenciar um do outro as vezes é bastante difícil.

As collections do Java fornecem dois tipos de proxy. Um deles para tornar a collection read-only e outro para fornecer acesso sincronizado.


Não confundir esse proxy com o proxy dinâmico do Java, a classe Proxy.

This message was edited 1 time. Last update was at 08/04/2010 11:26:59


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
acidburn
HelloWorld

Membro desde: 08/04/2010 09:12:09
Mensagens: 11
Offline

xjunior wrote:Bom amigo, lembre-se que o observer é um padrão comportamental e não estrutural, visite este link que irá dar uma visão semântica sobre os design patterns e como utilizá-los, não tem implementação, mas é excelente fonte para vc saber o que é e como implementar.

http://www.pg.cefetpr.br/coinf/simone/patterns/


não consigo acessar o proxy esta com erro no link que você sugeriu
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Offline

Ah, outro detalhe. Não confudir:

1. O design pattern com a classe Proxy;
2. O design pattern com um servidor de Proxy;

O proxy também se comporta como a classe que você quer acessar. O usuário pode nem saber que está lidando com um proxy. Note no exemplo acima, que nos 3 casos você acaba com um List<String> na mão. No caso da sua classe de imagem, o proxy e a imagem deveriam implementar uma interface comum, Image.

A classe ficaria assim:




Note que alguns poderiam argumentar que aquele proxy é, na verdade, um decorator, já que ele acrescenta a funcionalidade de lazy-loading. Isso é restrição de acesso ou funcionalidade extra? Depende do ponto de vista... em todo caso a implementação seria idêntica e, na minha opinião, discutir isso é discutir o sexo dos anjos.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
acidburn
HelloWorld

Membro desde: 08/04/2010 09:12:09
Mensagens: 11
Offline

Por qual motivo a terceira pessoa não sera chamada, vejo que o modelo que esta sendo utilizado esta diferente é por isso?






pedro.lamarao
What is classpath?

Membro desde: 08/04/2010 10:23:52
Mensagens: 7
Offline

acidburn wrote:
pedro.lamarao wrote:Um bom exemplo de aplicação de Proxy para funcionalidade, ao invés de economia, ocorre em frameworks de "remoting".
Como uma referência direta à memória de outro processo é impossível, o programa local faz referência a um objeto Proxy ao invés; e o Proxy oculta a solução para o problema de comunicação entre processos.

Qualquer objeto que está para um sistema externo -- como um conector de banco de dados -- pode ser considerado um Proxy do sistema externo no programa local.
Note que "proxy" é inglês para "procurador" -- uma pessoa legalmente habilitada a agir em nome de outra.


O que não consigo compreender é como você disse o Proxy é um procurador, porém nos exemplos que eu li, entendi que o proxy esta agindo como um intermediário em um determinado momento assim chamando uma classe para executar algo, como no exemplo a cima onde a classe proxy se não me engano é utilizada para realizar a consulta no banco me corrijam se estiver errado, mas qual a necessidade disso ?


Talvez a questão não seja sobre necessidade, mas sobre utilidade.
É claro que um idéia de um Proxy puro parece inútil -- se ele é idêntico ao objeto original, porque não acessar o objeto original logo de uma vez?
O Proxy parece mais útil quando ele oculta alguma regra adicional que seja útil.
No seu exemplo, essa regra adicional parece ser um cache de dados recuperados do banco -- de modo que os acessos subsequentes são mais econômicos.

ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Offline

acidburn wrote:Por qual motivo a terceira pessoa não sera chamada, vejo que o modelo que esta sendo utilizado esta diferente é por isso?


No proxy que você implementou, é pq o método getId() não aciona a busca. Como o id é passado no construtor e o proxy o armazena internamente, não tem pq fazer busca se você só quiser saber o id. Se fizer pessoa.get(2).getNome() aí sim, a busca será acionada.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
acidburn
HelloWorld

Membro desde: 08/04/2010 09:12:09
Mensagens: 11
Offline

ViniGodoy wrote:
acidburn wrote:Por qual motivo a terceira pessoa não sera chamada, vejo que o modelo que esta sendo utilizado esta diferente é por isso?


No proxy que você implementou, é pq o método getId() não aciona a busca. Como o id é passado no construtor e o proxy o armazena internamente, não tem pq fazer busca se você só quiser saber o id. Se fizer pessoa.get(2).getNome() aí sim, a busca será acionada.



a então é isso mesmo
acidburn
HelloWorld

Membro desde: 08/04/2010 09:12:09
Mensagens: 11
Offline



Por que na busca da segunda pessoa ele alega estar no cache, é por que o objeto proxy vai estar carregado com dados?
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Offline

acidburn wrote:Por que na busca da segunda pessoa ele alega estar no cache, é por que o objeto proxy vai estar carregado com dados?


Sim. E num segundo getNome() ele não buscará nada no banco.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
xjunior
JavaEvangelist
[Avatar]

Membro desde: 26/08/2009 15:49:19
Mensagens: 321
Localização: Belo Horizonte - MG
Offline

Isto mesmo, acidbun, então ele não buscará pois fará o cache desta busca...

acessem um dos melhores foruns de TI: http://www.clubedaprogramacao.com/forum/


Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
 
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Ir para:   
Powered by JForum 2.1.8 © JForum Team