Design Pattern – Façade

O pattern Façade (fachada), pertencente ao catálogo GOF, possui a intenção de estruturar o sistema de forma que se crie uma barreira (fachada) entre um conjunto complexo de instruções (subsistema) e os desenvolvedores (usuários), de forma que o subsistema torne-se mais fácil de ser utilizado e entendido, além de tornar-se reutilizável e confiável por executar sempre a mesma seqüência de passos. (Bishop, 2007, p. 93) (GoF, 1995, p. 179)

“Fornece uma interface unificada para um conjunto de interfaces em um subsistema. O Façade define uma interface de nível mais alto que torna o subsistema mais fácil de usar.” (GoF, 1995, p. 179)

clip_image002

 

A figura acima demonstra um subsistema sendo utilizado por múltiplos pontos da aplicação, sendo que tais utilizações nem sempre iniciam do mesmo ponto e não garantem completa execução das instruções necessárias. De forma oposta, o outro sistema possui uma interface única, onde o acesso ao subsistema é feito de forma padronizada e pré-definida.

Como exemplo, para aplicação do pattern Façade, utilizaremos o cenário onde inumeros acessos à base de dados que são necessários durante a aplicação.

O processo de acesso e recuperação de informações dentro de base de dados é um processo complexo e que exige uma sequência linear de instruções. Tal sequência se não executada na ordem correta, pode acarretar em perdas de desempenho ou em erros de conexão com a base de dados.

Para contornarmos tal situação o pattern Façade indica a criação de uma classe que agrupe o conjunto complexo de instruções do subsistema dentro de um método, e que este método seja executado ao invés dos múltiplos acessos feitos ao subsistema. (Freeman, 2005, p. 220) (Larman, 2004, p. 468)

A figura abaixo apresenta a forma como modelamos o conjunto complexo de acesso a dados do subsistema Microsoft ADO.Net com base nas regras de implementação do padrão Façade.

clip_image004

O código abaixo demonstra a forma como o subsistema de acesso a dados pode ser codificado conforme as regras de implementação do pattern Façade.

public class DataCommand
{
    static string myConnectionString =
        System.Configuration.ConfigurationManager.
        ConnectionStrings["DesignPatterns.ConnectionString"].
        ConnectionString;

    public static DataSet GetDataSet(string SQLCommand)
    {
        SqlConnection oConn = new SqlConnection(myConnectionString);
        DbDataAdapter dAdapter = new SqlDataAdapter(SQLCommand, oConn);
        DataSet dsReturn = new DataSet();
        try
        {
            dAdapter.Fill(dsReturn);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            oConn.Close();
        }
        return dsReturn;

    }

    public static DataTable GetDataTable(string SQLCommand)
    {
        return GetDataSet(SQLCommand).Tables[0];
    }

    public static int ExecuteCommand(string SQLCommand)
    {
        int returnValue = 0;
        SqlConnection oConn = new SqlConnection(myConnectionString);
        DbCommand oCommand = new SqlCommand(SQLCommand, oConn);
        try
        {
            oConn.Open();
            returnValue = oCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            oConn.Close();
        }
        return returnValue;
    }
}

 

Desta forma, conseguimos economizar muito código e também conseguimos padronizar a sua execução, adicionando mais segurança a execução da aplicação. Outra vantagem é o impacto na manutenabilidade do código, pois passamos a dar suporte a pequenos blocos que não se repetem inumeras vezes na aplicação.

O uso do design pattern Façade também simplifica nosso código, permitindo que torne-se mais compacto e inteligível. Abaixo temos um exemplo da execução de um comando na base de dados, podemos notar como o código necessário tornou-se muito mais simples:

class Program
{
    static void Main(string[] args)
    {
        DataSet dsReturn =
            DataCommand.GetDataSet("Select * From tbCliente");
    }
}

Espero que aproveitem.

Obrigado e []s!

Por

Fernando Henrique Inocêncio Borba Ferreira

Microsoft Most Valuable Professional – Data Platform Development


Referências:

BISHOP, Judith; C# 3.0 Design Patterns; O’Reilly; 2007.

GoF – HELM, Richard; VLISSIDES, John; JOHNSON , Ralph; GAMMA , Erich; Design Pattern – elements of reusable object-oriented software; BookMan; 1995.

LARMAN, Craig; Applying UML and patterns: an introduction to object-oriented analysis and design and the unified process; BookMan; 2004.

FREEMAN, Eric, FREEMAN, Elisabeth; Head First – Design Patterns; O’Reilly Media;  Editora Alta Books Ltda; 2ª Edição Revisada; 2005.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: