Esse artigo faz parte da revista .NET Magazine edição 55. Clique aqui para ler todos os artigos desta edição

ext; FONT-FAMILY: Verdana; mso-ansi-language: PT-BR; mso-bidi-font-family: Arial">Boas práticas

Aplicando Padrões de Projeto na prática – Parte 2

Aplicando os padrões Singleton, DAO, Façade, Command e a Técnica Simple Factory a uma aplicação OO

 

Neste artigo veremos

·         Aplicação dos Padrões de Projeto Singleton, DAO, Façade, Command e da Técnica Simple Factory

Qual a finalidade

·         Dar continuidade à demonstração de como criar uma aplicação real utilizando padrões de projetos.

Quais situações utilizam esses recursos?

·         Projetos que tenham foco em melhores práticas como reusabilidade, coesão e facilidade de manutenção terão benefícios com o conteúdo deste artigo.

 

Resumo do DevMan

Este artigo é uma continuação do artigo da edição anterior, apresentando os padrões Command, Façade e a técnica Simple Factory. O padrão Command separa o cliente que faz uma requisição de uma operação do objeto que processará essa requisição. O padrão Façade permite a criação de um controlador único, facilitando a manutenção do sistema. A técnica Simple Factory facilita a tarefa de controlar a instanciação de objetos.

 

Na parte 1 deste artigo, foram apresentados os padrões Singleton, DAO e MVC. Neste artigo, serão abordados os padrões Façade, Command e a Técnica Simple Factory. Os padrões implementados nesse artigo deverão ser aplicados diretamente ao projeto criado no artigo anterior.

 

O Padrão Façade

Apesar das vantagens da utilização do padrão MVC, discutidas no artigo anterior, em um sistema maior, o fato de existirem vários controladores pode dificultar sua manutenção. Através do padrão Façade, pode-se criar um controlador único, o que facilitará a implementação das visões por fornecer uma interface única para as requisições. Como o código do controlador fica centralizado, a manutenção do código é facilitada, assim como futuras implementações de novos requisitos. Um padrão Façade, com função semelhante a que será implementada nesse artigo, encontra-se na Figura 1, onde páginas Web postam seu conteúdo para um controlador único que implementa o padrão Façade. Quando o controlador único recebe a requisição, através de um parâmetro passado pela página, ele realiza o tratamento da informação, acessando as classes do modelo desejadas.

 

Figura 1. Exemplo do padrão Façade

 

Quando um usuário faz uma requisição HTTP, a requisição é processada pela página através de um handler. Para criar um handler personalizado deve-se criar uma classe que implementa a interface IHttpHandler. O controlador único do sistema Contatos será criado utilizando um handler personalizado e mapeando, através do arquivo web.config, todas as requisições para esse controlador. Para criar o controlador único, adicione uma nova classe na pasta Controller, chamada Handler. O código da classe Handler segue na Listagem 1.

As classes ConsultarContatoController e IncluirContatoController deverão ser excluídas do projeto pois não são mais necessárias.

 

Listagem 1. Classe Handler

 

01: using System;

02: using System.Data;

03: using System.Configuration;

04: using System.Web;

05: using System.Web.Security;

06: using System.Web.UI;

07: using System.Web.UI.WebControls;

08: using System.Web.UI.WebControls.WebParts;

09: using System.Web.UI.HtmlControls;

10: using System.Web.SessionState;

11: using PadroesVs1.Persistence;

12: using PadroesVs1.Model;

13:

14: namespace PadroesVs1.Controller

15: {

16:     public class Handler : IHttpHandler

17:     {

18:         public void ProcessRequest(HttpContext context)

19:         {

20:             switch (context.Request.Params["acao"])

21:             {

22:                 case "IncluirContato":

23:

24:                     try

25:                     {

26:                         ContatoDAO dao = ContatoDAO.GetInstance();

27:                         dao.Save(new Contato(context.Request.Params["nome"],

28:                                           context.Request.Params["email"]));

29:                     }

30:                     ...

Quer ler esse conteúdo completo? Tenha acesso completo