ASP .NET MVC - Realizando as operações CRUD de forma Assíncrona


 Este artigo explica mostra como realizar as operações CRUD de forma assíncrona em uma aplicação ASP .NET MVC usando os recursos do Scaffolding.

Este artigo usa basicamente os recursos da ASP .NET MVC e o Scaffolding para criar todo o código para realizar operações CRUD de forma assíncrona com base em um  modelo definido por uma classe de domínio que vai usar o Entity Framework 6.0 Code First para criar o banco de dados a tabela.

O MVC Scaffolding é um framework de geração de código para aplicativos ASP.NET MVC que de forma automática cria estruturas nos Controllers e nas Views das operações CRUD (Create, Read, Update e Delete) usando um modelo de dados ou um  modelo vazio.

A programação assíncrona tem sido um território onde poucos se atrevem a se aventurar pois até o momento esse território tem sido muito pantanoso e cheio de areia movediça.

Com o advento da Microsoft .NET Framework 4.5 isso mudou; a partir dessa versão tanto a linguagem C# como a VB .NET permitem que um "programador comum" possa escrever métodos assíncronos da mesma forma que escrevia métodos síncronos.

Todo esforço necessário para contornar os problemas oriundos da programação assíncrona que os programadores tinham que fazer para que os seus métodos assíncronos pudessem funcionar foi abstraído pelos novos recursos.

Você pode apenas usar o recurso sem se preocupar com o que esta ocorrendo nos bastidores ou pode querer entender qual o custo essa abstração vai ter para continuar tendo um controle total sobre o seu código.

Em uma aplicação web isso é ainda mais sensível, pois não são reservados no servidor muitos processos, e, se a carga aumenta no servidor web, então é possível que todos os processos estejam em uso. Nessa situação, o servidor não pode lidar com uma nova solicitação até que os processos sejam liberados.

Na programação síncrona, os processos de trabalho podem ficar amarrados enquanto eles não estão realmente fazendo qualquer trabalho, porque eles estão à espera para concluir as de I/O.

Quando usamos a programação assíncrona, mesmo quando as operações de I/O não estão encerradas, os processos de trabalho são liberados para o uso posterior. Assim, a programação assíncrona permite que os recursos do servidor sejam usados de forma mais eficiente.

No exemplo deste artigo veremos como é simples criar uma aplicação que realiza o CRUD de forma assíncrona usando o Scaffolding.

  • Recursos usados:

    Criando o projeto no VS Community 2013

    Abra o VS Community 2013 clique em New Project;

    Selecione Visual Basic (ou Visual C#) -> web e o template ASP .NET Web Application e informe o nome MVC_Assincrono e clique no botão OK;

    A seguir selecione o template MVC e clique no botão OK;

    Será criado a solução contendo um projeto com toda a estrutura pronta para a aplicação MVC. Abaixo vemos a estrutura do projeto na janela Solution Explorer:

    Se você selecionar o projeto e clicar no ícone Show All Files ( ) verá que também foram incluídas diversas referências ao nosso projeto incluindo a referência ao Entity Framework:

    Definindo o modelo de dados (Model)

    Agora vamos definir o nosso modelo de domínio que será usado para criar o banco de dados e a tabela no SQL Server usando o Entity Framework Code First.

    Para isso vamos incluir uma classe chamada Funcionario.vb na pasta Models. Clique com o botão direito sobre a pasta Models e a seguir clique em Add -> Class;

    Informe o nome Funcionario e inclua o código abaixo nesta classe:

     Public Class Funcionario
        Public Enum Genero
            Masculino
            Feminino
        End Enum
        Public Property ID As Integer
        Public Property Nome As String
        Public Property Sexo As Genero
        Public Property Cargo As String
        Public Property Salario As Decimal
        Public Property Cidade As String
        Public Property Email As String
     End Class
      public class Funcionario
      {
    	public enum Genero
    	{
    		Masculino,
    		Feminino
    	}
    	public int ID { get; set; }
    	public string Nome { get; set; }
    	public Genero Sexo { get; set; }
    	public string Cargo { get; set; }
    	public decimal Salario { get; set; }
    	public string Cidade { get; set; }
    	public string Email { get; set; }
      }

    Vamos agora definir o contexto da nossa aplicação criando uma classe chamada FuncionarioContexto que irá herdar da API DbContext e referenciar a classe Funcionario que acabamos de criar.

    Clique com o botão direito sobre a pasta Models e a seguir clique em Add -> Class;

    Informe o nome FuncionarioContexto e inclua o código abaixo nesta classe:

    Imports System.Data.Entity
    Public Class FuncionarioContexto
        Inherits DbContext
        Public Property Funcionarios() As DbSet(Of Funcionario)
    End Class
    using System.Data.Entity;
    
    public class FuncionarioContexto : DbContext
    {
            public DbSet<Funcionario> Funcionarios { get; set; }
    }

     

    Olhe bem para o código acima. Ele é pequeno mas usa a referência ao namespace System.Data.Entity e usa a classe DBcontext.

    A classe DbContext é a classe responsável por interagir com os dados como sendo objetos.

    Essa classe é responsável pelas seguintes atividades:

    Como você notou tamanho não é documento, e esse código será suficiente para gerar o banco de dados e a tabela Funcionario no SQL Server usando os recursos do Entity Framework Code-First.

    Como podemos definir o nome do banco de dados que deverá ser criado ?

    Uma forma de fazer isso é definir na classe FuncionarioContexto um construtor informando o nome do banco de dados que deverá ser chamado pela classe base.

    O código da classe com o construtor ficará assim:

    Imports System.Data.Entity
    Public Class FuncionarioContexto
        Inherits DbContext
        Public Sub New()
            MyBase.New("Cadastro_MVC")
        End Sub
        Public Property Funcionarios() As DbSet(Of Funcionario)
    End Class

    Dessa forma será criado o banco de dados Cadastro_MVC no SQL Server e a tabela Funcionarios.

    Nota: Usando Data Annotations podemos personalizar o banco de dados, as tabelas e seus campos.

    Compile o projeto e verifique se não existem erros.

    Criando o controlador e as views via Scaffolding

    Vamos agora criar o controlador e as respectivas views usando o MVC Scaffolding.

    Para isso clique com o botão direito sobre a pasta Controllers e a seguir clique em Add -> Controller;

    Na janela Add Scaffold selecione a opção : MVC 5 Controller with views usando Entity Framework e clique no botão Add:

    Na janela Add Controller informe as informações para a classe de modelo, a classe de contexto marque as opções conforme mostra a figura abaixo:

    Observe que marcamos a opção : Use async controller actions para que o código seja gerado com os recursos da programação assíncrona da plataforma .NET 4.5.

    Ao clicar no botão Add teremos a geração dos seguintes recursos:

    1- A classe FuncionarioController na pasta Controllers - Observe que o código gerado para a classe usa os recursos da programação assíncrona.

    Se você espiar o código do método Index() por exemplo, verá que ele agora é um método assíncrono(Async) que informa ao compilador para gerar callbacks para partes do método e criar automaticamente um objeto Task(Of ActionResult) que é retornado :

      ' GET: Funcionario
      Async Function Index() As Task(Of ActionResult)
           Return View(Await db.Funcionarios.ToListAsync())
      End Function

    Você também pode verificar que o tipo de retorno do método é Task(Of ActionResult) no qual Task(Of T) mostra o trabalho atual com o resultado do mesmo tipo (T).

    A palavra-chave Await chama o serviço. Em segundo plano, o método se divide em duas partes: 
     

    1. A primeira parte termina com as operações que são iniciadas de forma assíncrona;

    2. A segunda parte é colocada em um método de retorno de chamada que é chamado quando a operação for concluída.

    2 - As views : Create, Delete, Details, Edit e Index na pasta \Views\Funcionario

    Dessa forma temos tudo pronto para rodar a nossa aplicação MVC e teremos a criação do banco de dados, da tabela e podermos realizar todas as operações CRUD de forma assíncrona.

    Nota: Você pode personalizar os títulos, mensagens e textos alterando os arquivos views da pasta Funcionario, o arquivo _Layout.vbhtml da pasta Shared e o arquivo HomeController.vb da pasta Controllers.

    No arquivo _Layout.vbhtml inclua o código abaixo para exibir o menu Funcionarios:

    ....
    <
    div class="navbar-collapse collapse">
    <
    ul class="nav navbar-nav">
    <
    li>@Html.ActionLink("Home", "Index", "Home")</li>
    <li>@Html.ActionLink("Funcionarios", "Index", "Funcionario")</li>
    <
    li>@Html.ActionLink("Sobre", "About", "Home")</li>
    <
    li>@Html.ActionLink("Contato", "Contact", "Home")</li>
    </
    ul>
    ...
     

    Executando a aplicação teremos o seguinte resultado:

    1- A página principal

    2- Clicando no menu Funcionarios teremos a página para criar um novo funcionário:

    3- Clicando no link Criar Novo Funcionário temos a página a seguir onde podemos informar os dados de  um novo funcionário

    4- Abaixo vemos o funcionário cadastrado e as opções para editar, ver detalhes e deletar:

    5- Clicando no link Deletar temos a página abaixo onde podemos confirmar ou não a exclusão do funcionário:

    E, para concluir, vamos abrir o SQL Server e verificar o banco de dados Cadastro_MVC e a tabela Funcionarios criados. Onde vemos o registro que incluímos no exemplo persistido na tabela:

    Pegue o projeto completo aqui :  MVC_Assincrono.zip

    Em tudo somos atribulados, mas não angustiados; perplexos, mas não desanimados.
    Perseguidos, mas não desamparados; abatidos, mas não destruídos;
    Trazendo sempre por toda a parte a mortificação do Senhor Jesus no nosso corpo, para que a vida de Jesus se manifeste também nos nossos corpos;

    2 Coríntios 4:8-10

    Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

    Quer migrar para o VB .NET ?

    Quer aprender C# ??

    Quer aprender os conceitos da Programação Orientada a objetos ?

    Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

      Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

    Referências:


    José Carlos Macoratti