Noções básicas sobre modelos, exibições e controladores (VB)

por Stephen Walther

Confuso sobre modelos, exibições e controladores? Neste tutorial, Stephen Walther apresenta as diferentes partes de um aplicativo MVC ASP.NET.

Este tutorial fornece uma visão geral de alto nível de ASP.NET modelos, exibições e controladores MVC. Em outras palavras, ele explica o M', V' e C' em ASP.NET MVC.

Depois de ler este tutorial, você deve entender como as diferentes partes de um aplicativo MVC ASP.NET funcionam juntas. Você também deve entender como a arquitetura de um aplicativo MVC ASP.NET difere de um aplicativo ASP.NET Web Forms ou aplicativo Active Server Pages.

O aplicativo MVC de ASP.NET de exemplo

O modelo padrão do Visual Studio para criar ASP.NET Aplicativos Web MVC inclui um aplicativo de exemplo extremamente simples que pode ser usado para entender as diferentes partes de um aplicativo MVC ASP.NET. Aproveitamos esse aplicativo simples neste tutorial.

Crie um novo aplicativo ASP.NET MVC com o modelo MVC iniciando o Visual Studio 2008 e selecionando a opção de menu Arquivo, Novo Projeto (consulte a Figura 1). Na caixa de diálogo Novo Projeto, selecione sua linguagem de programação favorita em Tipos de Projeto (Visual Basic ou C#) e selecione ASP.NET Aplicativo Web MVC em Modelos. Clique no botão OK.

Caixa de diálogo Novo Projeto

Figura 01: Caixa de diálogo Novo Projeto (clique para exibir a imagem em tamanho real)

Quando você cria um novo aplicativo ASP.NET MVC, a caixa de diálogo Criar Projeto de Teste de Unidade é exibida (consulte a Figura 2). Essa caixa de diálogo permite que você crie um projeto separado em sua solução para testar seu aplicativo MVC ASP.NET. Selecione a opção Não, não crie um projeto de teste de unidade e clique no botão OK .

Caixa de diálogo Criar Teste de Unidade

Figura 02: Caixa de diálogo Criar Teste de Unidade (clique para exibir a imagem em tamanho real)

Depois que o novo aplicativo MVC ASP.NET for criado. Você verá várias pastas e arquivos na janela Gerenciador de Soluções. Em particular, você verá três pastas chamadas Modelos, Exibições e Controladores. Como você pode adivinhar nos nomes das pastas, essas pastas contêm os arquivos para implementar modelos, exibições e controladores.

Se você expandir a pasta Controladores, deverá ver um arquivo chamado AccountController.vb e um arquivo chamado HomeController.vb. Se você expandir a pasta Exibições, verá três subpastas chamadas Conta, Página Inicial e Compartilhada. Se você expandir a pasta Página Inicial, verá dois arquivos adicionais chamados About.aspx e Index.aspx (consulte a Figura 3). Esses arquivos compõem o aplicativo de exemplo incluído com o modelo padrão ASP.NET MVC.

A janela Gerenciador de Soluções

Figura 03: a janela Gerenciador de Soluções (clique para exibir a imagem em tamanho real)

Você pode executar o aplicativo de exemplo selecionando a opção de menu Depurar, Iniciar Depuração. Como alternativa, você pode pressionar a tecla F5.

Quando você executa um aplicativo ASP.NET pela primeira vez, a caixa de diálogo na Figura 4 é exibida e recomenda que você habilite o modo de depuração. Clique no botão OK e o aplicativo será executado.

Caixa de diálogo Depuração Não Habilitada

Figura 04: Caixa de diálogo Depuração Não Habilitada (Clique para exibir a imagem em tamanho real)

Quando você executa um aplicativo MVC ASP.NET, o Visual Studio inicia o aplicativo no navegador da Web. O aplicativo de exemplo consiste em apenas duas páginas: a página Índice e a página Sobre. Quando o aplicativo é iniciado pela primeira vez, a página Índice é exibida (consulte a Figura 5). Você pode navegar até a página Sobre clicando no link do menu no canto superior direito do aplicativo.

A página Índice

Figura 05: a página Índice (clique para exibir a imagem em tamanho real)

Observe as URLs na barra de endereços do navegador. Por exemplo, quando você clica no link do menu Sobre, a URL na barra de endereços do navegador é alterada para /Home/About.

Se você fechar a janela do navegador e retornar ao Visual Studio, não poderá encontrar um arquivo com o caminho Página Inicial/Sobre. Os arquivos não existem. Como isso é possível?

Uma URL não é igual a uma página

Quando você cria um aplicativo ASP.NET Web Forms tradicional ou um aplicativo Active Server Pages, há uma correspondência um-para-um entre uma URL e uma página. Se você solicitar uma página chamada SomePage.aspx do servidor, é melhor que haja uma página no disco chamada SomePage.aspx. Se o arquivo SomePage.aspx não existir, você receberá um erro 404 - Página Não Encontrada .

Ao criar um aplicativo MVC ASP.NET, por outro lado, não há correspondência entre a URL que você digita na barra de endereços do navegador e os arquivos encontrados em seu aplicativo. Em um aplicativo MVC ASP.NET, uma URL corresponde a uma ação do controlador em vez de uma página no disco.

Em uma ASP.NET tradicional ou aplicativo ASP, as solicitações do navegador são mapeadas para páginas. Em um aplicativo MVC ASP.NET, por outro lado, as solicitações do navegador são mapeadas para ações do controlador. Um aplicativo ASP.NET Web Forms é centrado em conteúdo. Um aplicativo ASP.NET MVC, por outro lado, é centrado na lógica do aplicativo.

Noções básicas sobre o roteamento de ASP.NET

Uma solicitação de navegador é mapeada para uma ação do controlador por meio de um recurso da estrutura ASP.NET chamada ASP.NET Roteamento. ASP.NET Roteamento é usado pela estrutura MVC ASP.NET para rotear solicitações de entrada para ações do controlador.

ASP.NET Roteamento usa uma tabela de rotas para lidar com solicitações de entrada. Essa tabela de rotas é criada quando seu aplicativo Web é iniciado pela primeira vez. A tabela de rotas é configurada no arquivo Global.asax. O arquivo MVC Global.asax padrão está contido na Listagem 1.

Listagem 1 – Global.asax

' Note: For instructions on enabling IIS6 or IIS7 classic mode, 
' visit https://go.microsoft.com/?LinkId=9394802

Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

        ' MapRoute takes the following parameters, in order:
        ' (1) Route name
        ' (2) URL with parameters
        ' (3) Parameter defaults
        routes.MapRoute( _
            "Default", _
            "{controller}/{action}/{id}", _
            New With {.controller = "Home", .action = "Index", .id = ""} _
        )

    End Sub

    Sub Application_Start()
        RegisterRoutes(RouteTable.Routes)
    End Sub
End Class

Quando um aplicativo ASP.NET é iniciado pela primeira vez, o método Application_Start() é chamado. Na Listagem 1, esse método chama o método RegisterRoutes() e o método RegisterRoutes() cria a tabela de rotas padrão.

A tabela de rotas padrão consiste em uma rota. Essa rota padrão divide todas as solicitações de entrada em três segmentos (um segmento de URL é qualquer coisa entre barras de avanço). O primeiro segmento é mapeado para um nome de controlador, o segundo segmento é mapeado para um nome de ação e o segmento final é mapeado para um parâmetro passado para a ação chamada ID.

Por exemplo, considere a seguinte URL:

/Product/Details/3

Essa URL é analisada em três parâmetros como este:

Controlador = Produto

Ação = Detalhes

Id = 3

A rota Padrão definida no arquivo Global.asax inclui valores padrão para todos os três parâmetros. O controlador padrão é Home, a Ação padrão é Index e a ID padrão é uma cadeia de caracteres vazia. Com esses padrões em mente, considere como a seguinte URL é analisada:

/Employee

Essa URL é analisada em três parâmetros como este:

Controlador = Funcionário

Ação = Índice

Id =

Por fim, se você abrir um aplicativo MVC ASP.NET sem fornecer nenhuma URL (por exemplo, http://localhost), a URL será analisada da seguinte maneira:

Controlador = Página Inicial

Ação = Índice

Id =

A solicitação é roteada para a ação Index() na classe HomeController.

Noções básicas sobre controladores

Um controlador é responsável por controlar a maneira como um usuário interage com um aplicativo MVC. Um controlador contém a lógica de controle de fluxo para um aplicativo MVC ASP.NET. Um controlador determina qual resposta enviar de volta a um usuário quando um usuário faz uma solicitação de navegador.

Um controlador é apenas uma classe (por exemplo, uma classe Visual Basic ou C#). O exemplo ASP.NET aplicativo MVC inclui um controlador chamado HomeController.vb localizado na pasta Controladores. O conteúdo do arquivo HomeController.vb é reproduzido na Listagem 2.

Listagem 2 – HomeController.cs

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        ViewData("Title") = "Home Page"
        ViewData("Message") = "Welcome to ASP.NET MVC!"

        Return View()
    End Function

    Function About()
        ViewData("Title") = "About Page"

        Return View()
    End Function
End Class

Observe que o HomeController tem dois métodos chamados Index() e About(). Esses dois métodos correspondem às duas ações expostas pelo controlador. A URL /Home/Index invoca o método HomeController.Index() e a URL /Home/About invoca o método HomeController.About().

Qualquer método público em um controlador é exposto como uma ação do controlador. Você precisa ter cuidado com isso. Isso significa que qualquer método público contido em um controlador pode ser invocado por qualquer pessoa com acesso à Internet inserindo a URL certa em um navegador.

Compreendendo as exibições

As duas ações do controlador expostas pela classe HomeController, Index() e About(), ambas retornam uma exibição. Uma exibição contém a marcação HTML e o conteúdo que é enviado para o navegador. Uma exibição é equivalente a uma página ao trabalhar com um aplicativo MVC ASP.NET.

Você deve criar seus modos de exibição no local certo. A ação HomeController.Index() retorna uma exibição localizada no seguinte caminho:

\Views\Home\Index.aspx

A ação HomeController.About() retorna uma exibição localizada no seguinte caminho:

\Views\Home\About.aspx

Em geral, se você quiser retornar uma exibição para uma ação do controlador, precisará criar uma subpasta na pasta Exibições com o mesmo nome do controlador. Dentro da subpasta, você deve criar um arquivo .aspx com o mesmo nome que a ação do controlador.

O arquivo na Listagem 3 contém a exibição About.aspx.

Listagem 3 – About.aspx

<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2>About</h2>
    <p>
        Put content here.
    </p>
</asp:Content>

Se você ignorar a primeira linha na Listagem 3, a maior parte do restante da exibição consistirá em HTML padrão. Você pode modificar o conteúdo da exibição inserindo qualquer HTML desejado aqui.

Um modo de exibição é muito semelhante a uma página no Active Server Pages ou ASP.NET Web Forms. Uma exibição pode conter conteúdo HTML e scripts. Você pode escrever os scripts em sua linguagem de programação .NET favorita (por exemplo, C# ou Visual Basic .NET). Você usa scripts para exibir conteúdo dinâmico, como dados de banco de dados.

Noções básicas sobre modelos

Discutimos os controladores e discutimos as exibições. O último tópico que precisamos discutir são os modelos. O que é um modelo MVC?

Um modelo MVC contém toda a lógica do aplicativo que não está contida em uma exibição ou controlador. O modelo deve conter toda a lógica de negócios do aplicativo, a lógica de validação e a lógica de acesso ao banco de dados. Por exemplo, se você estiver usando o Microsoft Entity Framework para acessar seu banco de dados, criará suas classes do Entity Framework (seu arquivo .edmx) na pasta Modelos.

Uma exibição deve conter apenas a lógica relacionada à geração da interface do usuário. Um controlador deve conter apenas o mínimo de lógica necessário para retornar a exibição correta ou redirecionar o usuário para outra ação (controle de fluxo). Todo o resto deve estar contido no modelo.

Em geral, você deve se esforçar por modelos gordos e controladores magros. Os métodos do controlador devem conter apenas algumas linhas de código. Se uma ação do controlador ficar muito gorda, considere mover a lógica para uma nova classe na pasta Modelos.

Resumo

Este tutorial forneceu uma visão geral de alto nível das diferentes partes de um aplicativo Web ASP.NET MVC. Você aprendeu como ASP.NET Roteamento mapeia solicitações de entrada do navegador para ações específicas do controlador. Você aprendeu como os controladores orquestram como as exibições são retornadas ao navegador. Por fim, você aprendeu como os modelos contêm negócios de aplicativos, validação e lógica de acesso ao banco de dados.