Padrão de Projeto Façade - apontes77/projetoApp_CMP1118 GitHub Wiki

Façade (ou Fachada, em português) é um termo muito oriundo da área de Arquitetura.

A grosso modo, podemos entender como a parte de fora de uma construção, que isola o mundo exterior o mundo interior.

Quando levamos o conceito para a Engenharia de Software, focando a arquitetura/estrutura de um sistema, do ponto de vista de semântica, a ideia é a semelhante.

Estruturalmente falando, isolamos partes do sistema (sub-sistema) com o uso de uma fachada (façade) e somente através dela (passando por ela) é que temos acesso ao sub-sistema.

Façade – ou Fachada – é um Padrão de Projeto (Design Pattern) muito útil e recomendado para projetos de software. É um padrão de projeto estrutural.

Os Padrões de Projeto são divididos em três “categorias”:

  • criacionais (utilizados na criação de objetos dentro de um sistema);
  • estruturais (utilizados na estrutura do sistema);
  • comportamentais (utilizados no comportamento do sistema).

Objetivo do Façade

  1. Abstrair/simplificar a complexidade de um sub-sistema;
  2. Desacoplar o sistema, favorecendo a separação de responsabilidades;
  3. Reduzir a dependência entre "pedaços" do sistema;
  4. "Esconder" código sujo, inviável de refatorar;

Visão estrutural do Façade

façade

Basicamente, a imagem acima é um diagrama de classes que ilustra o isolamento de um conjunto de classes (Class1, Class2 e Class3), com uma fachada entre este sub-sistema e seus consumidores.

As classes Client1 e Client2 somente acessam as classes Class1, Class2 e Class3 através da classe Façade. Na fachada há um método chamado doSomething(), que quando acessado por Client1 e Client2, executa métodos das classes citadas.