Não é novidade, que a cada dia vemos inúmeras aplicações com interfaces avançadas  e cada vez mais sofisticadas surgindo no mercado. Com o crescimento deste tipo de aplicação, que atende pelo nome de Rich Internet Application ou aplicações de internet ricas( RIA ), surgem novas necessidades,  tecnologias para construção e também novos desafios.  E este desafio se dá, pelo fato de não estarmos trabalhando da maneira tradicional, e passando a expor do lado do cliente recursos ricos e sofisticados para inúmeros fins.  O Silvelight da microsoft, vem ganhando espaço  e tem evoluido muito ultimamente. E isto, para fazer frente a tecnologias concorrentes como flash e o flex.  E como amamos arquitetura, onde ela se encaixa em um cenário deste? E o desenvolvimento em camadas? São perguntas que iremos responder neste post.

Cenário Tradicionar X Cenário RIA

     O que temos no cenário tradicional, é um cenário em que o número de requisições ao servidor é grande. A cada ação do usuário seja uma pesquisa, alteração ou inserção de dados, é realizada uma interação com o servidor. Este fluxo continuo, de requisição e resposta é inerente a este tio de cenário, pois o mesmo está preparadao para isto. Já no cenário RIA, o fato de expor recursos ricos, avançados e uma interface além de rica funcional como uma interface de um programa desktop, nos leva a ter que tomar determinados cuidados como evitar o excesso de requisições ao servidor para evitar um gargalo e perda de performance. São cuidados como este, que temos que ter na hora de montar uma arquitetura, para um sistema que roda em um cenário RIA.

RIA e os seus desáfios

     Um problema comum ao se desenvolver aplicações RIA e até mesmo um dos seus desáfios era justamente desenvolver em camadas. Observer a imagen abaixo:

     A imagen acima, ilustra um cenário web tradicional. Em que tanto a lógica da apresentação, como a lógica da aplicação ficam no servidor, sendo de responsabilidade da lógica da apresentação renderizar o resultado requisitado pelo cliente, que é quem interage com a mesma através de inúmeras requisições, cujas quais, devem ser evitadas em um cenário RIA. Observer a próxima figura:
 
 
 
 Na figura acima, observamos o que diferencia um cenário RIA de um cenário tradicional, e vemos que a lógica da apresentação, não está mais do lado do servidor junto com a lógica da aplicação, e sim do lado cliente. E isto se deve, ao fato de garantir a performance e evitar gargalos no sistema. Esta inversão é feita justamnete para manter o ambiente estável e evitar sérios problemas.

O WCF RIA Services

     O WCF RIA Services, é um middware de comunicação, ou seja, ele irá fazer a ponte entre a lógica da aplicação( no lado do servidor ) e a lógica da apresentação( no lado cliente ). Agindo assim como uma fronteira de confiança, atravéz da qual, as camadas de apresentação e aplicação poderão se comunicar e trabalhar. 

     O WCF RIA Services, visa facilitar, ou seja, tornar mais suave o desenvolvimento em camadas para aplicações RIA. Para isto ele expõe serviços, operações e entidades para ser consumido no lado do cliente. Para entender melhor observe a figura abaixo:

 
  A figura acima ilustra bem como o  WCF RIA Services funciona. No lado esquerdo está o browser  está a  lógica da apresentação e a fronteira de confiança, ou seja,  uma interface,  um proxy em que a lógica da aplicação é exportada atravéz deste contrato. E atráz, no servidor, ficam as nossas bases de dados, comunicação com outros serviços e até o domnínio da nossa aplicação.

Domain Services X Domain Context  

     Os Domain Services, são coração do WCF RIA Services. É ele quem controla, a serialização de objetos para ambos os lados servidor e cliente. Só precisamos escrever nosso código uma única vez e o mesmo, fica disponivél para os dois projetos em nossa solução: o projeto servidor e Cliente.  O Domain Context, é com ele que o cliente trabalha, ou seja, ele é um espelho perfeito do Domain Service, que roda no lado do servidor. Analise a figura abaixo:

 
      No projeto servidor, fica o Domais Service. Que contem as entidades, operações e serviços com os quais nossa aplicação trabalha. E no projeto cliente, em que se encontra a solução silverlight, fica o Domain Context, espelhando as operações, serviços e entidades contidas no Domaisn Service. Para um entendimento maior, vamos analisar o projeto HRApp disponivel no codeplex para download aqui:
 
 
 
     Em uma mesma solução, estão os projetos servidor( ASP.NET  ) e client( Silverlight ). Veja abaixo, a descrição deste projeto de exemplo.

Seta Azul: Indica o projeto silvelight, que é o projeto client. 

Seta amarela: Indica o projeto ASP.NET, que é o projeto servidor.

Seta Vermelha: Indica o arquivo que é gerado automaticcamente, pelo WCF RIA Services. Este arquivo, é gerado da exportação das funcionalidades do EDMX, que é o modelo de dados e as funcionalidades que podem ser adicionadas. Ou seja ele é o resultado da exportação do Domain Service, uma vez sendo compilada a solução se você abrir a pasta GeneratedCode destro da mesma, estará um arquivo deste( extensão .g.cs ).

Seta Verde: Indica um EDMX, arquivo do entity Framework, que contém o modelo de entidades, que também tem suas funcionalidades exportadas para o arquivo que é gerado pelo WCF RIA Services.

     Entendendo melhor o processo, é que quando você compila o projeto, é feita uma cópia para o projeto silverlight, do seu Domain Service, ou seja, automaticamente o mesmo é espelhado no Domaind Context. Que contém absolutamente tudo, que existe no Domain Service, operações e entidades.  Olhe um trecho do código do Domain Service e do Domain Context.

Domain Service

 
 

Domain Context

 
 
     As figuras acima mostram, justamente o que foi dito. O Domain Context reflete justamente o Domain Services. E ai então pode-se trabalhar utilizando esta classe de proxy e navegar, chamar e utilizar todas funções e serviços disponívels no Domaisn Services. Bom Pessoal, espero ter ajudado e passar um pouco do WCF RIA Services e como ele pode ser extremamente útil no desenvolvimento em camadas para aplicações RIA.  Abraços e até a próxima.