Skip to content

Padrão Façade

Olá amigos!

Dia de folga do trabalho, mulher trabalhando, filha na vovó e para passar o tempo achei melhor passar estudando. (Ainda não sei por que escrevi isso) kkk

Hoje falarei sobre o padrão Façade e sua importância para o sistema. Será apresentado o seu conceito e por ultimo um exemplo de implementação para melhor entendimento do leitor. Bora começar! 🙂

O padrão Facade é usado quando você quer fornecer uma interface simples e específica para um grupo de objetos que têm uma interface complexa. Leia interface como a palavra “ponte” entre o cliente e o resto dos objetos complexo.

Pesquisando no Wikipédia uma Façade pode:

  • Tornar uma biblioteca de software mais fácil de entender e usar;
  • Tornar o código que utiliza esta biblioteca mais fácil de entender;
  • Reduzir as dependências em relação às características internas de uma biblioteca, trazendo flexibilidade no desenvolvimento do sistema;
  • Envolver uma interface mal desenhada, com uma interface melhor definida.

Podemos dizer que um exemplo de Façade bastante utilizado é uma classe de conexão ao banco de dados. Normalmente os sistemas possuem classe de banco de dados com as seguintes operações:

  • Receber a string de conexão.
  • Abrir conexão.
  • Fechar conexão.
  • Executar a string de SQL no banco de dados.

Por que esta classe é uma Façade? Por que ela faz justamente o que o conceito inicial explicou. Fornece uma interface simples e especifica para um grupo de objetos complexo. A classe de conexão com banco de dados trabalha com as classes SqlConnection, SqlCommand e SqlExecuteReader sem que o cliente que utiliza a Façade saiba, ou seja, ela é uma fachada para as classes que envolvem e interagem com banco de dados.

Façade vem do Francês e significa literalmente fachada.

Abaixo um exemplo de implementação de Façade retirado do site DoFactory.com

Imagem

[sourcecode language=”csharp”]
using System;

namespace Facade
{
class SubSystemOne
{
public void MethodOne()
{
Console.WriteLine(" SubSystemOne Method");
}
}
}

[/sourcecode]

 

[sourcecode language=”csharp”]
using System;

namespace Facade
{
class SubSystemTwo
{
public void MethodTwo()
{
Console.WriteLine(" SubSystemTwo Method");
}
}
}
[/sourcecode]

 

[sourcecode language=”csharp”]
using System;

namespace Facade
{
class SubSystemThree
{
public void MethodThree()
{
Console.WriteLine(" SubSystemThree Method");
}
}
}
[/sourcecode]

 

[sourcecode language=”csharp”]
using System;

namespace Facade
{
class SubSystemFour
{
public void MethodFour()
{
Console.WriteLine(" SubSystemFour Method");
}
}
}
[/sourcecode]

 

[sourcecode language=”csharp”]
using System;

namespace Facade
{
class Facade
{
private SubSystemOne _one;
private SubSystemTwo _two;
private SubSystemThree _three;
private SubSystemFour _four;

public Facade()
{
_one = new SubSystemOne();
_two = new SubSystemTwo();
_three = new SubSystemThree();
_four = new SubSystemFour();
}

public void MethodA()
{
Console.WriteLine("\nMethodA() —- ");
_one.MethodOne();
_two.MethodTwo();
_four.MethodFour();
}

public void MethodB()
{
Console.WriteLine("\nMethodB() —- ");
_two.MethodTwo();
_three.MethodThree();
}
}
}
[/sourcecode]

 

[sourcecode language=”csharp”]
using System;

namespace Facade
{
class MainApp
{
private Facade _facade;

/// <summary>
/// Entry point into console application.
/// </summary>
public void Main()
{
_facade = new Facade();
_facade.MethodA();
_facade.MethodB();
// Wait for user
Console.ReadKey();
}
}
}
[/sourcecode]

No exemplo a cima é possível ver que a classe Facade evita que a classe MainApp (cliente) precise saber sobre as classes de SubSystem e suas complexidades igual ao exemplo da classe de conexão com banco de dados.

Concluindo, utilizar o padrão Façade faz com que o cliente não saiba a complexidade por traz dos objetos de subsistemas utilizados, fazendo assim um único ponto de entrada através da classe de fachada.

Bem pessoal, por hoje é isso e espero que tenham gostado mais uma vez! Abraço e fiquem com Deus.

Fontes:

http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1
http://pt.wikipedia.org/wiki/Fa%C3%A7ade

 

Published inQualidade de software

2 Comments

  1. Daniel Camboim Daniel Camboim

    Bacana, ja usei esse padrão em um projeto meu. Parabéns e continue com o trabalho!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *