A finalidade deste artigo é apresentar formas para a manipulação de objetos via Javascript em aplicações Web. Desta forma, será demonstrado como o padrão conhecido como JSON (JavaScript Object Notation) pode ser utilizado em aplicações ASP.NET MVC em conjunto com o NHibernate.
Em que situação o tema é útil
O tema é útil quando for necessário integrar uma aplicação ASP.NET MVC utilizando o modelo JSON, ao invés de utilizar o tradicional padrão XML. Uma das vantagens deste padrão (JSON) é a facilidade na manipulação de seu formato, se comparado ao XML (outra forma muito utilizada no retorno de informações).
Implementando JSON no ASP.NET MVC com NHibernate
JSON é um formato aberto para a transferência de informações entre aplicações, sendo geralmente empregado no intercâmbio de dados entre soluções voltadas à Web. Diferente da especificação XML, este padrão procura oferecer uma alternativa mais simplificada e enxuta para a representação de objetos como texto: pares de informações formados por um identificador (nome de propriedade) e um valor correspondente equivalem a propriedades de um objeto. Por ser open source, a tecnologia JSON não está restrita a uma plataforma (o ASP.NET MVC oferece total suporte a este formato, por exemplo), com o seu uso estando comumente associado à execução de chamadas assíncronas via Javascript.
Independente da forma como um site Web venha a ser criado, é praticamente certo que o mesmo fará uso de mecanismos de Javascript na implementação de suas funcionalidades, visto que na maioria das vezes é necessário uma maior interação com o usuário. Isto pode acontecer tanto por meio da utilização de AJAX (Asynchronous JavaScript and XML), quanto do jQuery (conjunto de bibliotecas que simplifica o uso de Javascript). Empregar estes recursos baseados em scripts permite introduzir diversos comportamentos dinâmicos dentro de uma aplicação (por exemplo, drag-and-drop de itens em uma página), tornando mais simples a interação dos usuários com as interfaces disponibilizadas.
Muitos controles visuais (gratuitos ou mesmo comercializáveis) são gerados a partir de construções em Javascript. Assim como em componentes de linguagens de programação convencionais, estes elementos dependem muitas vezes de dados que se encontram organizados sob a forma de um objeto. É o padrão conhecido como JSON que possibilita que objetos sejam consumidos por tais controles.
O objetivo deste artigo é mostrar como o formato JSON pode ser utilizado em aplicações construídas a partir do framework ASP.NET MVC. Para isto, será construída uma aplicação de exemplo em que ocorrerá a conversão de objetos para o padrão JSON, com os dados correspondentes sendo exibidos em gráficos gerados a partir de uma biblioteca Javascript (Google Chart Tools).
JQuery é uma biblioteca JavaScript gratuita e amplamente utilizada no desenvolvimento de aplicações Web. Tem como uma de suas principais metas oferecer compatibilidade com os principais browsers em uso no mercado, disponibilizando para isto meios que facilitem a manipulação de controles HTML via JavaScript, bem como tornando possível a inclusão de uma série de controles sofisticados, efeitos visuais e outros tipos de comportamentos dentro de páginas Web.
ASP.NET MVC: uma visão geral
O pattern conhecido como MVC (Model-View-Controller) está normalmente associado à construção de Web sites, com o mesmo prevendo a divisão das estruturas de uma aplicação em três partes principais: Model, View e Controller. Já o framework ASP.NET MVC representa a implementação deste padrão dentro da plataforma .NET, valendo-se de muitos dos recursos e facilidades proporcionadas pela tecnologia ASP.NET (como o controle de acesso via Membership, master pages etc.).
A camada Model engloba dados e prováveis regras para manipulação destes últimos. As estruturas disponibilizadas por Model são geralmente utilizadas por Controllers, servindo ainda de base para a produção de informações que constarão em Views. Além disso, correspondem às respostas em relação a alguma ação requisitada por um usuário. Uma prática extremamente comum é que a camada Model seja implementada empregando algum framework de ORM, como o Entity Framework e o NHibernate, por exemplo.
É na camada Controller que acontecerá o tratamento de requisições, por meio de métodos declarados em classes específicas para este fim (baseadas no tipo básico Controller, pertencente ao namespace System.Web.Mvc). As operações envolvidas no processamento de solicitações são chamadas de Actions, sendo que a execução das instruções contidas nas mesmas envolve geralmente o acesso a informações presentes na camada Model, com a possível apresentação do resultado através de uma estrutura definida na camada View.
Já na camada View encontram-se páginas e controles usados na exibição de informações processadas por Controllers. Em uma View um usuário poderá não apenas consultar informações, como também disparar outra Action (se este for o caso) que foi definida em um Controller específico.
A Tabela 1 exibe alguns dos tipos de resultados que podem ser retornados por Actions dentro do framework MVC:
Tipo de Resultado |
Descrição |
ViewResult |
Objeto devolvido por Actions associadas a páginas HTML/Views do framework MVC. |
FileResult |
Devolução de um arquivo em disco ou array de bytes em memória, como resultado da execução de uma Action (em um processo equivalente ao download de um arquivo que foi requisitado via HTTP). Neste caso, em vez de retornar um conteúdo HTML, retorna o download de um arquivo X, por exemplo. |
JsonResult |
Permite a serialização de um objeto criado em .NET no formato JSON, tornando possível a manipulação das informações contidas no mesmo através de recursos de Javascript. |
JavaScriptResult |
Retorna um trecho de Javascript, de maneira que o código resultante possa ser executado pelo browser que originou a requisição. |
Tabela 1. Alguns retornos possíveis de Actions no ASP.NET MVC
Separação de Responsabilidades ("Separation of Concerns") é um princípio de desenvolvimento de software que procura, por meio de várias diretrizes, contribuir para a obtenção de aplicações formadas por componentes mais coesos. Já o conceito de coesão deve ser compreendido, em termos gerais, em que grau uma estrutura de software (classe ou componente) atende o objetivo inicial para o qual a mesma foi concebida. A noção de alta coesão indica que o item considerado não acumula responsabilidades além daquelas para as quais foi especificado, sendo esta uma característica desejável no esforço em busca de projetos de software bem estruturados.
Frameworks ORM (“Object-relational mapping” - ou “Mapeamento objeto relacional”) permitem que estruturas de bancos de dados (como tabelas e views) sejam representadas sob a forma de classes. Alguns exemplos de mecanismos ORM de larga utilização são o Entity Framework (o qual também integra a plataforma .NET) e o NHibernate (ferramenta gratuita baseada no Hibernate da plataforma Java).
O formato JSON
A adoção do formato JSON está normalmente associada, dentro de aplicações Web, à utilização de AJAX e outros recursos baseados em Javascript. É importante ressaltar também que as principais plataformas de desenvolvimento da atualidade (incluindo neste grupo o .NET Framework) contam com mecanismos que suportam o uso de JSON em variados tipos de implementação.
Conforme mencionado anteriormente, é comum que diversos controles baseados em Javascript e na extensão JQuery façam uso de informações estruturadas como objeto, empregando neste caso o formato JSON na manipulação dos dados correspondentes. Do ponto de vista estrutural, um objeto em JSON é composto por pares de informações, com cada par possuindo um identificador (string que identifica o nome de propriedade) e seu respectivo valor.
Os seguintes tipos de dados podem ser empregados para a representação de valores em JSON: Numeric, String (texto iniciado e finalizado por aspas duplas), Boolean (true ou false), Array (os diversos elementos devem estar separados por vírgula e constando dentro de colchetes), Object e null. No caso específico de um objeto, o mesmo irá apresentar um conjunto de chaves (nomes de propriedades que serão strings) e valores associados (qualquer um dos tipos disponíveis e já citados aqui). A Listagem 1 demonstra um exemplo de objeto contendo dados relativos a uma empresa, com as informações estando de acordo com o padrão JSON.
...