# Proxy
# Histórico de Versão
Data | Autor(es) | Descrição | Versão |
---|---|---|---|
26/10/2020 | João Pedro Gomes(jppgomes) e Cauê(caue96) | Adicionando utilização do proxy no projeto | 0.1 |
16/11/2020 | Lucas(lucasmidlhey) | justificativa e link para artefatos | 0.2 |
# Introdução
O Pattern Proxy é um padrão Estrutural que faz parte do GoF (Gang of Four) e faz um papel intermediário entre o solicitante e o provedor. O solicitante é quem faz a requisição e o provedor entrega os recursos em resposta à requisição.
O proxy é basicamente um encapsulador de um objeto que está realmente servindo.
O padrão de proxy costuma ser utilizado quando se possui procedimentos complexos e é preciso fornecer uma interface simples. Também pode ser utilizado para fornecer uma camada de segurança aos objetos e uma interface local para objetos remotos em servidores diferentes.
Outros papéis importantes do padrão são os seguintes:
- Providenciar um substituto para um objeto controlar o acesso às classes;
- Usar um nível extra de delegação para fornecer acesso controlado a um objeto;
- Adicionar um agrupador e distribuidor para proteger um componente real de complexidade indevida.
# Estrutura
Segue um exemplo do uso de proxy no código do qrcode:
# Definição do proxy em qrcode.py
def auth_required(role=EmployeeRole.basic):
"""
Verifies if request has a valid token.
Then calls a permission strategy
"""
class Qrcode(ABC):
@abstractmethod
def generate(self):
pass
class QrcodeTable(Qrcode):
def __init__(self):
self.table_id = None
self.image_data = None
def generate(self):
image = qrcode.make("https://google.com.br")
buffered = BytesIO()
image.save(buffered, format="JPEG")
self.image_data=base64.b64encode(buffered.getvalue()).decode("utf-8")
self.table_id = randint(0, 1000)
class QrcodeProxy(Qrcode):
def __init__(self):
self.qrcode = QrcodeTable()
def generate(self):
qrcode = QrcodeProxy()
if(self.qrcode is not None):
qrcode.generate()
qrcode.generate()
# Justificativa
O padrão Pattern Proxy é muito necessário em nosso sistema em por exemplo, lazy-loading tecnica utilizada para utilizar o banco apenas quando for necessário, otimizações em banco, permitindo criar rotinas de log e controle de acesso, e permitindo deixar claro o endereço do objeto real, afim de tornar mais pratico. Analisando nosso sistema acreditamos que utilizar o proxy foi uma medica paleativa e correta principalmente para reutilização do software.
# Referências
- REFACTORING.GURU. Strategy. Disponível em: https://refactoring.guru/pt-br/design-patterns/proxy . Acesso em: 26 de outubro. 2020.
- www.devmedia.com.br - Conheça o Pattern Proxy - GoF (Gang of Four). Disponível em: https://www.devmedia.com.br/conheca-o-pattern-proxy-gof-gang-of-four/4066. Acesso em 26/10/2020
- pt.wikipedia.org - Proxy (padrões de projeto). Disponível em: https://pt.wikipedia.org/wiki/Proxy_(padr%C3%B5es_de_projeto). Acesso em 26/10/2020
- github.com - Proxy. Disponível em: https://github.com/kelvins/design-patterns-python/tree/main/estruturais/proxy. Acesso em 26/10/2020
← Decorator Backlog v1 →