Whats new? | Login
Cadastre-se | Atendimento | RSS
 
Live chat by Netwatts
Home Entenda o site Revistas Canais Cursos Palestras Suporte Fórum +Serviços Assine Compre Créditos
Você está em: / canal .net [artigos]
   + .net:   artigos   |   vídeos   |    cursos   |    mais
 
 
Outras seções:
Home 
Entenda o site 
Revistas 
Canais 
Cursos 
Palestras 
Suporte 
Fórum 
Oportunidades 
 Todos os links 

 
  Ir para o Canal .net  
+Canais:
Canal Delphi 
Canal Java 
Canal .net 
Canal Banco de dados 
Canal Mobile 
Canal Ruby on Rails 
Canal PHP 
Canal ASP 
Canal WebDesign 
Canal Engenharia de Software 
Canal Linux 
Canal Scripting 
Canal Outros 
  Todo conteúdo DevMedia 

 
  ver cursos de .net  
+Cursos:
Cursos de Java 
Cursos de .net 
Cursos de Banco de dados 
Cursos de Delphi 
Cursos de Engenharia de Software 
Cursos de Ruby on Rails 
Cursos de ASP 
Cursos de WebDesign 
Cursos de PHP 
Cursos de PalmOS 
Cursos de Linux 
Cursos de Scripting 
  Formações completas 
  Todos os cursos 

 
Canal de conteúdo .net
Revista .net Magazine
Suporte .net
Formacoes completas .net
Palestras de .net
E-books de .net
Downloads de .net
 

+Revistas:
ClubeDelphi 
.net Magazine 
Java Magazine 
webMobile Magazine 
SQL Magazine 
Engenharia de Software Magazine 
  Edições anteriores impressas 
  Todas as revistas 


[Fechar]
Este post está disponível para quem é assinante da .net Magazine ou para quem possui Créditos DevMedia.


  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ 0,00 (assinante) ou R$ 0,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ 0,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia


Padrões de projeto em .NET: Adapter

Padrões de projeto em .NET: Adapter

 

Chegando aos padrões estruturais, este padrão, também conhecido como Wrapper, tem por objetivo converter a interface de uma classe em outra interface, esperada pelos clientes. O Adapter permite que classes com interfaces incompatíveis trabalhem em conjunto – o que, de outra forma, seria impossível.


Uma das motivações mais evidentes para a utilização deste padrão seja, talvez, o consumo de web services por outras tecnologias que não .NET, como Visual Baisc 6.0, por exemplo.

Considere, por exemplo, um web service que fornece a temperatura atualizada de todos os estados do país. Este web service foi desenvolvido com tecnologia .NET e fornece os resultados à aplicações que suportam a mesma tecnologia via XML. Porém, uma agência de turismo, que possui um sistema legado em Visual Basic 6.0 e está satisfeita com o mesmo, gostaria de utilizar as informações sem que seja necessária uma migração. Neste ponto entra o padrão Adapter.


Com este padrão, é possível criar uma classe que seja compatível com a tecnologia da agência de viagens (Visual Basic 6.0) e permita que a mesma utilize o web service que informa a temperatura atualizada nos estados do país (.NET). Além disso, a empresa responsável pelo web service não precisa abdicar da reutilização, que foi, provavelmente, a principal motivação para a criação do serviço, para fornecer suas informações.

 

Quando usar Adapter?

Use o padrão Adapter quando:

 

  • Você quiserusar uma classe existente, mas sua interface não corresponder à interface de que necessita;
  • Você quiser criar uma classe reutilizável que coopere com classes não-relacionadas ou não-previstas, ou seja, classes que não necessariamente tenham interfaces compatíveis;
  • (Somente para adaptadores de objetos) Você precisar usar várias subclasses existentes, porém, for impraticável adaptar essas interfaces criando subclasses para cada uma. Um adaptador de objeto pode adaptar a interface da sua classe-mãe.

Estrutura

 

Um adaptador de classe usa a herança múltipla para adaptar uma interface à outra:


rnppnetadafig01.jpg

 

Um adaptador de objeto depende da composição de objetos:

 

rnppnetadafig02.jpg 

 

  • Alvo: define a interface específica do domínio que Cliente usa.
  • Cliente: colabora com objetos compatíveis com a interface de Alvo.
  • Adaptado: define uma interface existente que necessita ser adaptada.
  • Adaptador: adapta a interface do Adaptado à interface de Alvo.

Conseqüências

Os adaptadores de classes e de objetos têm diferentes soluções de compromisso. Um adaptador de classe:

 

  • Adapta o Adaptado ao Alvo através do uso efetivo de uma classe Adaptador concreta. Em conseqüência, um adaptador de classe não funcionará quando quisermos adaptar uma classe e todas as suas subclasses;
  • Permite a Adaptador substituir algum comportamento do Adaptado, uma vez que Adaptador é uma subclasse de Adaptado;
  • Introduz somente um objeto, e não é necessário endereçamento indireto adicional para chegar até o Adaptado.

Um adaptador de objeto:

 

  • Permite a um único Adaptador trabalhar com muitos Adaptados – isto é, o Adaptado em si e todas as suas subclasses (se existirem). O Adaptador também pode acrescentar funcionalidade a todos os Adaptados de uma só vez;
  • Torna mais difícil redefinir um comportamento de Adaptado. Ele exigirá a criação de subclasses de Adaptado e fará com que Adaptador referencie a subclasse ao invés do Adaptado em si.

Exemplo de código

Para ilustrarmos a utilização do padrão Adapter, vamos analisar o código do web service de temperaturas, mencionado no início do artigo, e do adaptador que será oferecido ao desenvolvedor da aplicação Visual Basic 6.0. Abaixo, o código do web service, que é o Adaptado:

  

Imports System.Web

Imports System.Web.Services

Imports System.Web.Services.Protocols

 

<WebService(Namespace:="http://tempuri.org/")> _

<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _

Public Class Service

     Inherits System.Web.Services.WebService

 

    <WebMethod()> _

    Public Function RecuperarTemperaturaRJ() As Integer

        Return 40

    End Function

 

    <WebMethod()> _

    Public Function RecuperarTemperaturaSP() As Integer

        Return 26

    End Function

 

End Class

 

Este web service, para fins de exemplificação da utilização do padrão que estamos discutindo, contém somente 2 métodos: RecuperarTemperaturaRJ e RecuperarTemperaturaSP. Ambos retornam um número aleatório, para facilitar o entendimento. Abaixo, temos o código de uma classe escrita em VB .NET que servirá como Adaptador do web service citado. Esta classe se transformará, posteriormente, em uma DLL, artefato que é perfeitamente compreendido pelo Visual Basic 6.0.

 

Public Class Adaptador

 

    Public Function RecuperarTemperaturaRJAdaptado() As Integer

 

        Dim Servico As New WSAdapter.Service

        Return Servico.RecuperarTemperaturaRJ

 

    End Function

 

    Public Function RecuperarTemperaturaSPAdaptado() As Integer

 

        Dim Servico As New WSAdapter.Service

        Return Servico.RecuperarTemperaturaSP

 

    End Function

 

End Class

 

A classe Adaptador possui exatamente os mesmos métodos que possui o nosso web service, porém, quem fornece o resultado é o web service. A classe nada mais é do que um entregador da informação criada pelo web service. Para que isso fosse possível, foi criada uma web reference entre o projeto da classe Adaptador e o web service. Com isso, a DLL gerada pelo projeto da classe Adaptador poderá, facilmente, se comunicar com o sistema em Visual Basic 6.0 da agência de turismo e com o web service de temperaturas.

 

Este foi fácil né? No próximo artigo, veremos o padrão Bridge.





RAFAEL NASCIMENTO
Rafael Nascimento (rafabirth@hotmail.com), é Microsoft Certified Professional em Visual Basic .NET e líder da competência .NET em uma consultoria multinacional.
Ver space do autor


Estatísticas deste post:
Visualizações:  4460
Favoritado:  4 vez(es)
 
Conteúdo:
Didática:
Utilidade:
2 0
Feedbacks: 2

  Central de Serviços:
Inclua seu próprio artigo! (ajuda)
Participe! Inclua um comentário
Adicionar este post a Favoritos
Marcar este post como lido/assistido
Inclua uma anotação pessoal (ajuda)
RSS Feeds
Versão para impressão



Participe! Inclua um comentário
[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


[Fechar]

Você precisa estar logado para dar seu feedback.

Clique aqui para efetuar o login

Caso não tenha um cadastro DevMedia, clique aqui para se cadastrar (gratuito)
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
2009 - Todos os Direitos Reservados a DevMedia Group