Integrando Spring.NET com NHibernate e ASP.NET MVC - Parte 2 - Revista .Net Magazine 105
Nesta segunda e última parte desta série, veremos um cenário de aplicação que se aproxima do mundo real, aplicando integração entre o Spring.NET, o NHibernate e o ASP.NET MVC.
Recursos especiais neste artigo:
Contém nota Quickupdate, Conteúdo sobre boas práticas, Conteúdo sobre Engenharia,
Artigo no estilo Curso Online
Nesta segunda e última parte desta série, veremos um cenário de aplicação que se aproxima do mundo real, aplicando integração entre o Spring.NET, o NHibernate e o ASP.NET MVC. Nesta aplicação, são apresentados exemplos da criação de um cenário, onde usaremos dois padrões, bastante comuns no mercado, Facade e DTO, além de realizar toda a configuração do Spring em arquivos separados de configuração, aumentando assim a organização de nosso projeto.
Em que situação o tema é útil
Com a aplicação dos conceitos apresentados
neste artigo o leitor conhecerá como o Spring.NET pode atuar em mais de uma
camada de forma estável e funcional, comprovando que o mesmo pode ser útil aos
nossos projetos, indo além da Injeção de Dependências, permitindo que tenhamos
mais flexibilidade para controlar todo o ciclo de vida da aplicação. Com isso o
leitor terá como benefício o aumento da testabilidade de suas aplicações, assim
como uma queda no acoplamento e aumento na coesão da mesma.
Na edição anterior iniciamos uma série de artigos sobre integração do Spring.NET com outros frameworks do mercado. Foi apresentado um comparativo entre o NHibernate e o Spring Data, que internamente têm uma implementação do NHibernate até a versão 3.2, demonstrando as diferenças entre ambos, no que diz respeito à produtividade e controle da aplicação.
O Spring.NET é um dos gigantes do mundo dos frameworks, voltados para .NET, inspirado na sua versão para Java, sendo que ele por si só já representa um universo enorme de possibilidades e ganhos para nossos projetos, porém não se limita a isso, fornecendo mecanismos de integração com outros gigantes do mundo .NET, como, o NHibernate e o ASP.NET MVC.
O Spring MVC nos permite obter ganhos de produtividade quando integrado ao ASP.NET MVC, aliando o poder do Spring.NET com a robustez do ASP.NET MVC. Destacando que a adoção do Spring MVC em projetos traz as seguintes vantagens:
· Interface IDependencyResolver, que normalmente é implementada diretamente pelo ASP.NET MVC, passa a ser implementada pelo Spring.NET, que realiza ainda a Injeção de Dependências em Controllers, ActionFilters e outros tipos utilizados no ASP.NET MVC, facilitando a componentização e execução da aplicação, de forma serializada e melhor gerenciada. O Spring MVC torna esta implementação simples para suas aplicações MVC, registrando seus objetos, sejam Controllers, ActionFilters e afins, no arquivo de configuração do Spring.NET, dentro das suas respectivas configurações, como descrito nos próximos capítulos. Este registro fará com que o ASP.NET MVC tire proveito de toda a infra-estrutura disponibilizada pelo Spring MVC, quando esse for executado.
· Uso de escopo para objetos Web. Estes objetos quando registrados dentro dos padrões do Spring MVC, podem ter seu comportamento definido em escopos, sendo que cada um dos escopos representa uma forma distinta de criação de objetos na Views e nos Controllers.
Para demonstrar a facilidade de implementação do Spring MVC, diante do ASP.NET MVC, se apresentado um exemplo. Supondo que em um projeto MVC, existe uma página chamada CadastrarCliente.aspx, que acessa uma camada de negócios através da Classe de Negócio ManterCliente e que para a realização do cadastro utilize o método CadastraCliente. A Listagem 1 mostra um exemplo de implementação deste cenário, em um controller do ASP.NET MVC.
Listagem
1. Controller comum em ASP.NET MVC
01 public class ClienteController : Controller {
02 public ActionResult CadastrarCliente(ClienteModel cliente){
03 RegistrarCliente business = new RegistrarCliente();
04 //Implementação de cliente
05 ...
06 business.RegistraCliente(cliente);
07 ...
08 return View("CadastrarCliente");
09 }
10 }
Na linha 03, da Listagem 1, temos a criação de nossa classe, que representa a implementação da regra de negócio da aplicação, enquanto que na linha 06 temos a execução desta regra, com a execução do método RegistraCliente. Vale destacar que para utilizar qualquer objeto é necessária a clausula new para instanciar os mesmos.
A Listagem 2 traz um exemplo de implementação do mesmo controller, com o Spring MVC. Vale ressaltar que para isso todas as configurações do Spring devem ser realizadas previamente, porém veremos estas configurações detalhadamente a frente, nos limitando agora a visualizar as diferenças entre a implementação final, ASP.NET MVC puro e Spring.MVC.
Listagem
2. Controller gerenciado pelo Spring MVC
01 public class ClienteController : Controller {
02 public ManterCliente business {get; set;}
03 public ActionResult CadastrarCliente(ClienteModel cliente){
//Implementação de cliente
05 business.RegistraCliente(cliente);
return View("CadastrarCliente");
06 }
07 }
Observando a Listagem 2, pode se notar uma diferença na declaração da propriedade da linha 02. Esta propriedade será a responsável por receber a Injeção de Dependências via Spring,NET, da classe ManterCliente. Já dentro do Controller, verificamos que a propriedade business está instanciada e sendo utilizada sem a necessidade da clausula new. Um ponto importante neste trecho é que foi efetuada a implementação de um objeto gerenciado pelo Spring.NET, não sendo preciso utilizar a interface IApplicationContext para chamar business e implementar uma classe estática, para utilizar como ServiceLocator como visto no artigo sobre Spring.NET, na edição 103, pois o componente do Spring que agora controla tais requisições não é mais o Spring.Core, mas o Spring.web.mvc, possibilitando o funcionamento destes recursos através da implementação correta na classe da propriedade a ser injetada e da configuração destes objetos no arquivo Web.config.
Na parte prática, veremos todas as implementações realizadas como exemplo e informações de configuração. Sendo satisfatória a implementação do componente MVC do Spring, visto que é mais fácil de implementar do que o Spring.NET, na integração com webForms, por exemplo, onde se deve registrar a página .aspx, como um objeto no arquivo de configuração e depois poder usufruir da Injeção de Dependências e outras facilidades do Spring.NET.
Escopo para Objetos gerenciados pelo Spring MVC
Os escopos (ou estados) são formas de comportamento de um objeto gerenciado pelo Spring, que fará com que os objetos instanciados tenham um comportamento específico dentro do domínio da aplicação, mais precisamente Controllers e Views. Estes escopos se dividem em:
· Application (Aplicação): é o escopo padrão, usado em todos os objetos onde não existe escopo definido no arquivo de configuração. Este escopo cria uma instância única de um objeto dentro do Servidor de Aplicação durante a sua execução, caso o Servidor de Aplicação seja reiniciado, este objeto será automaticamente eliminado da memória do mesmo. Objetos desta natureza têm o mesmo comportamento que um singleton em sua aplicação padrão."
[...] continue lendo...Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo