Partilhar via


HelloWorld com o .NET RIA Services

Olá pessoal, tudo certo?

Quando pensamos no desenvolvimento de aplicações RIA – Rich Internet Application, o uso de uma abordagem n-tier envolve uma série de desafios. Assim, o principal objetivo do .NET RIA Services é oferecer a produtividade do ASP.NET/RAD - Rapid Application Development para o desenvolvimento de aplicações RIA.

O .NET RIA Services oferece uma unificação no desenvolvimento entre cliente e servidor, focando os dados da aplicação e a camada de negócios. Através de um framework prescritivo, que oferece templates e patterns atendendo cenários típicos de RIA, o .NET RIA Services lida com os principais tópicos de integração do cliente Web com as camadas de negócio do lado do servidor, encapsulando diversas operações.

Entre os principais tópicos tratados pelo .NET RIA Services temos:

  • manipulação de dados, através de ordenação, paginação e filtros;
  • regras de acesso a dados, através de autorização, validação e conflito de acesso;
  • operações customizadas;
  • operações batching e off-line;

Neste post, vamos ver uma primeira aplicação com o .NET RIA Services, usando o CTP de Maio de 2009. Para preparar sua máquina para esse desenvolvimento, instale os pacotes indicados neste post aqui.

Vamos começar criando uma aplicação do tipo “Silverlight Navigation Application” com o Visual Studio 2008:

image

Criando nossa aplicação “HelloWorldRIAServices”, devemos selecionar as opções de "Host the Silverlight application in a new Web Site”, assim como a opção "Link to ASP.NET server project", como vemos na figura a seguir:

image

Nossa solução é criada com dois projetos principais: a parte cliente e a parte servidor, já que escolhemos um projeto do tipo ASP.NET Web Application para container da solução. No futuro, teremos outras opções disponíveis para o .NET RIA Services. A solução faz referência para algumas bibliotecas novas, como vemos abaixo:

image

Nesse ponto, faça uma primeira compilação e execute a solução. Você verá uma página Web com Silverlight 3.0, que oferece a estrutura base para nossa solução. Essa página poderá ser customizada conforme a necessidade de sua aplicação.

O passo seguinte é criar um modelo de dados. Adicione uma classe LINQ to SQL ao projeto “HelloWorldRIAServices.Web”, apontando para a base de dados de sua preferência.

image

Com a classe LINQ to SQL criada, adicione as tabelas desejadas. No meu exemplo, adicionei o modelo de dados com as seguintes tabelas:

image

Nesse ponto, faça mais uma compilação, gerando assim as classes para o mapeamento de dados do modelo escolhido, antes de continuar.

Feita a compilação, vamos adicionar uma classe Domain Service, da categoria Web. Adicione essa nova classe ao projeto “HelloWorldRIAServices.Web”.

image

No meu exemplo, chamei essa nova classe de “HelloWorldDomainService.cs”. Assim que você clicar em “Add”, você terá uma nova janela para escolher as entidades que farão parte de seu domínio de serviços e serão expostas para o lado cliente.

Escolhi todas as tabelas, sem a opção de edição ligada, veja:

image

Note que estou selecionando também a opção “Generate associated classes for metadata”. Essa opção irá gerar as classes no lado cliente, para o tratamento das entidades na camada de apresentação. Você poderá ver o arquivo gerado no projeto “HelloWorldRIAServices” fazendo a apresentação de todos os arquivos do projeto, na opção “Project\Show all Files”.

Adicionando essa classe, nosso projeto ganha algumas novas referências, como System.ComponentModel.DataAnnotations, System.Web.DomainServices, System.Web.DomainServices.Providers e System.Web.Ria.

Também criamos os arquivos “HelloWorldDomainService.cs” e “HelloWorldDomainService.metadata.cs” no projeto do lado servidor automaticamente.

Como passo seguinte, vamos adicionar uma referência para "System.Windows.Controls.Data.dll" no projeto “HelloWorldRIAServices” , lado do cliente, para a adição do objeto Data Grid Control, que fará a apresentação dos dados exportados pelo .NET RIA Services.

Uma vez feita a referência, podemos aproveitar a página “HomePage.xaml” do projeto cliente para adicionar o controle, veja:

image

Na sequência, adicionamos o DataGrid Control ao corpo da página “HomePage.xaml”, abaixo:

image

Ainda na página “HomePage.xaml”, vamos adicionar uma chamada para o evento Page_Loaded, como vemos a seguir:

image

Antes de adicionar o evento Page_Loaded no arquivo “HomePage.xaml.cs”, devemos fazer a referência ao projeto Web, através da cláusula using, a seguir:

image

Agora, podemos adicionar nosso evento Page_Loaded no arquivo “HomePage.xaml.cs” .

Note que neste evento fazemos o uso do DomainService exportado pelo .NET RIA Services, o que vai permitir que nosso projeto cliente possa manipular as entidades escolhidas para exportação na aplicação.

Veja como ficou o arquivo “HomePage.xaml.cs” depois dessas mudanças:

    1: using System;
    2: using System.Collections.Generic;
    3: using System.Linq;
    4: using System.Net;
    5: using System.Windows;
    6: using System.Windows.Controls;
    7: using System.Windows.Documents;
    8: using System.Windows.Input;
    9: using System.Windows.Media;
   10: using System.Windows.Media.Animation;
   11: using System.Windows.Shapes;
   12: using System.Windows.Navigation;
   13: using HelloWorldRIAServices.Web; //Adicionado para referênciar o projeto server!
   14:  
   15: namespace HelloWorldRIAServices
   16: {
   17:     public partial class HomePage : Page
   18:     {
   19:         public HomePage()
   20:         {
   21:             InitializeComponent();
   22:         }
   23:  
   24:         // Executes when the user navigates to this page.
   25:         protected override void OnNavigatedTo(NavigationEventArgs e){}
   26:  
   27:         private void Page_Loaded(object sender, RoutedEventArgs e)
   28:         {
   29:             HelloWorldDomainContext context = new HelloWorldDomainContext();
   30:             this.dataGrid.ItemsSource = context.Accounts;
   31:             context.LoadAccounts();
   32:         }
   33:     }
   34: }

Pronto! :)

Compilando a solução, você irá exportar as entidades recebidas através do .NET RIA Services via o DataGrid Control, que adicionamos na página “HomePage.xaml” do projeto “HelloWorldRIAServices” :

image

Lembrando, o produto ainda está em CTP e deve ganhar no futuro novas funcionalidades, assim como uma maior automação em alguns pontos do processo de exportação e referências de assemblies. Mas já é bastante promissor a possibilidade de construir aplicações RIA de uma forma tão rápida, suportando os novos recursos do Silverlight 3.0.

Em posts futuros, vamos ver novos exemplos sobre o .NET RIA Services e seus recursos. Não deixe de fazer seus testes também!

Por enquanto é só! Até o próximo post :)

Waldemir.