Padrão - Facade
Tags: webdev, javascript, cleancode, node
Published: 2023-02-06 20:27:14


![Pattern facade](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xtq3638weia8acxrprfq.png)



O padrão de projeto Facade foi introduzido como parte do padrão Gang of Four Design Patterns book, publicado em 1994. O livro é considerado um marco na comunidade de desenvolvimento de software e apresenta vários padrões de projeto comuns utilizados na programação de sistemas. 

O padrão Facade é um padrão de projeto de software que fornece uma interface simplificada para um sistema complexo, escondendo sua complexidade e permitindo que os clientes interajam com ele de maneira mais fácil e clara. Ele funciona como uma fachada ou uma "cara amigável" para o sistema subjacente, oferecendo um conjunto de métodos simplificados que podem ser chamados pelos clientes em vez de lidar diretamente com a complexidade do sistema. Esse padrão é útil para aumentar a coesão e a clareza do código, além de facilitar a manutenção e a evolução do sistema.

- Você pode usar o padrão Facade em diversos cenários onde você tem um sistema complexo que precisa ser simplificado para que os clientes possam interagir com ele de maneira mais fácil e clara. Alguns exemplos incluem:
- Sistemas de biblioteca: onde você tem uma série de classes e componentes relacionados que precisam ser simplificados para que os clientes possam utilizá-los de maneira eficiente.
- Aplicações com diversos subsistemas: onde você tem diversos subsistemas complexos que precisam ser agrupados de maneira mais simples para que os clientes possam interagir com eles de maneira mais fácil.
- Sistemas de banco de dados: onde você tem uma série de operações complexas que precisam ser simplificadas para que os clientes possam realizar operações comuns, como inserção, consulta e remoção de dados, de maneira mais fácil.
- Interação com APIs: onde você tem uma API complexa que precisa ser simplificada para que os clientes possam interagir com ela de maneira mais fácil.

O padrão Facade pode ser aplicado em muitos outros cenários além destes, e a sua utilização dependerá das suas necessidades específicas.


Segue abaixo um simples exemplo de código usando o padrão Compositor.

```js

class SystemA {
  operationA() {
    console.log('Operation A');
  }
}

class SystemB {
  operationB() {
    console.log('Operation B');
  }
}

class Facade {
  constructor() {
    this.systemA = new SystemA();
    this.systemB = new SystemB();
  }

  operation() {
    console.log('Facade Operation');
    this.systemA.operationA();
    this.systemB.operationB();
  }
}

const facade = new Facade();
facade.operation();
// Saída:
// Facade Operation
// Operation A
// Operation B

```

Temos duas classes SystemA e SystemB que representam dois sistemas complexos. Cada uma possui um método que representa uma operação específica.

Temos uma classe Facade que fornece uma interface simplificada para esses sistemas. Ela possui um construtor que instancia objetos das classes SystemA e SystemB, escondendo sua complexidade.

A classe Facade possui um método operation que agrupa as operações dos sistemas e fornece uma interface simplificada para o cliente. Esse método invoca os métodos operationA e operationB das classes SystemA e SystemB, respectivamente.

Por fim, temos uma instância da classe Facade chamada facade que é usada para invocar o método operation. Isso faz com que seja impresso na saída: "Facade Operation", "Operation A" e "Operation B".

O objetivo deste código é esconder a complexidade dos sistemas SystemA e SystemB e fornecer uma interface simplificada para o cliente através da classe Facade.

_Simples, né ?_

O padrão de projeto Facade é útil em situações nas quais:

- Existe um sistema complexo que é difícil de ser compreendido ou utilizado pelo cliente devido à sua grande quantidade de classes, interfaces e dependências.
- Você precisa simplificar a interface de um sistema complexo para que seja mais fácil de ser usado pelos clientes.
- Você deseja esconder a complexidade interna de um sistema de seus clientes, tornando-o mais fácil de ser mantido e evoluído.
- Você deseja modularizar o sistema em partes menores que são mais fáceis de entender e testar.
- Você precisa integrar vários sistemas diferentes em um único ponto de entrada.

Em resumo, o padrão Facade é útil quando você precisa proporcionar uma interface simplificada para um sistema complexo, tornando-o mais fácil de ser usado e mantido.

**Conclusão**

O padrão de projeto Facade é um padrão de arquitetura de software que fornece uma interface simplificada para um sistema complexo. Ele esconde a complexidade interna do sistema e fornece uma única interface para o cliente, tornando-o mais fácil de ser usado e mantido.


Espero ter ajudado, até a próxima.