Pergunta

O que é um objeto de proxy na inversão de controle sentido / Aspect-Oriented?

Qualquer bons artigos sobre o que um objeto proxy é?
Por que você iria querer usar um?
E como escrever um em C #?

Foi útil?

Solução

Em geral, um objeto proxy é um objeto (instância de uma classe) que expõe a mesma interface pública exata como uma "classe real", mas simplesmente encaminha todas as chamadas feitas a ele de membros para a outra classe real. objetos proxy são usados ??para uma variedade de razões ...

Um dos propósitos é "fingir" ser a classe real para que um componente do cliente (ou objeto) pode "acreditar" que está falando com o objeto "real", mas dentro do proxy, outras coisas, (como extração de madeira, suporte transacional , etc.) está a ser feito ao mesmo tempo ... em segundo lugar, um proxy pode ser muito barato de comparson ao objeto real ,. e muitas vezes é usado para que os objetos reais podem ser conservada (desligado ou liberado a uma piscina para ser usado por outros clientes) quando o cliente não é usá-los ... As estadias de proxy "vivo" e que o cliente pensa que ainda tem uma conexão com o objeto real, mas sempre que "chama" o objeto, ele é, na verdade, chamar o proxy, que vai e pega outro objeto real apenas para lidar com a chamada, e depois libera o objeto real quando a chamada é feita.

Como a inversão de controle (COI) .. Isso refere-se a um teste padrão comum (também referido como injeção de dependência), onde os objetos dependentes dentro de uma classe é "injectada" em um exemplo de a classe, a partir do código do cliente, ao controle de qual versão de um objeto dependente da instância usará ... COI pode ser usado para injetar um objeto "proxy" para uma classe onde ele pensa que está usando o objeto real ... a frase Inversão de controle refere-se ao fato de que, ao usar este padrão, a decisão sobre qual implementação real é chamado não está mais sob o controle da classe que faz a chamada, mas para o cliente dessa classe, quando se injeta uma instância de um objeto dependente para a classe a ser usado para esta chamada.

Geralmente o termo COI é usado com o que é chamado de COI Container , que é uma classe especificamente projetado para ser responsável pela criação de instâncias de classes dependentes com base em informações de baixo acoplamento sobre essas classes (tipos) que ele recebe de uma fonte que não seja dependências hard-wired (na maioria das vezes, a partir de algum tipo de arquivo de configuração). Geralmente, quando você usar um recipiente IOC, você cria uma instância de quando o aplicativo é iniciado e, em seguida (por leitura de dados de configuração ou qualquer outro), você "registar" cada uma das classes (tipos) que o recipiente do COI será responsável por , com um valor de chave. A chave é muitas vezes o tipo abstrato ou interface que todas as instâncias deste registro deve implementar). Então, nas operações normais da sua aplicação, onde você poderia ter new'd-se um exemplo de um desses tipos, você chamar o COI Container, e pedir-lhe para uma instância em vez disso, usando o tipo abstrato / interface como a chave . O recipiente do COI, em seguida, usa a reflexão ou dinâmico de carga, (ou qualquer outro), para criar uma instância de qualquer tipo foi "registrado" com essa chave. Desta forma, simplesmente mudando os dados de configuração, você pode controlar os tipos reais usados ??pelo aplicativo, alterá-los em um ambiente ou local de implantação dos utilizados em outro.

Outras dicas

Um recurso muito bom sobre isso é o velho "Gang of Four" padrões de design livro. Este livro é muito útil para qualquer desenvolvimento de software orientado a objeto. Eu pessoalmente estou usando objetos de proxy para o carregamento lento com NHibernate. Eu não usar proxies com inversão de controle, porque eu determinação interface tipos somente com meu IoC.

A explicação de Charles Bretana é muito bom.

Eu não posso imaginar a relação entre proxy e AoP. Alguém poderia explicar isso aqui?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top