Spring Net

A proposta deste trabalho é mostrar as principais características e suas aplicabilidades no uso do framework Spring.Net, devido as facilidades de uso e a forma de desenvolvimento, aplicações em sistemas.
O Spring. Net é uma Framework portada da biblioteca “Spring” do java para .Net, cujo principal objetivo é implementar uma infraestrutura para aplicação e estimulo a aplicações que usam Patterns de arquitetura.
Um framework com várias funcionalidades que funciona como um pivô para dar apoio ao pattern de injeção e dependência, que pode usar técnica de Inversão de Controles. O uso do paradigma Orientado a Objetos é incontestável pelo fato que há diversas linguagens que implementam este conceito. São os diversos meios de mapeamento como: herança, polimorfismo, condições por contrato, exceto o tipo de forma simples e fácil com OO, e modelagem do comportamento dos objetos.
Surge então a ideia de um complemento ao paradigma de objetos, que é o paradigma orientado a aspecto (AOP).
A programação orientada a aspectos tem como objetivo a separação do código segundo a sua importância para a aplicação, permitindo que o programador encapsule o código secundário em módulos separados do restante da aplicação.

Inversão de Controles (IoC) e Injeção de Dependência

O que torna o Spring.net um framework tão poderoso no desenvolvimento de aplicações com baixo acoplamento entre camadas e orientado a aspectos é a utilização destes dois conceitos em conjunto. A inversão de controle ocorre quando o controle de execução dos métodos é gerenciado não mais diretamente pelo programador, e sim, por um container de configuração, este, assume o papel de gerenciar a aplicação, desta forma, as camadas ficam independentes entre si reduzindo o acoplamento e facilitando no reuso e testes do sistema. Havendo a necessidade de alterações nas camadas, isso pode ser feito sem problemas e sem necessidade de se estar percorrendo código e descobrindo onde a classe alterada estava sendo utilizada, pois a injeção de dependência é quem trata de amarrar as camadas através de um contexto obtido a partir do container de configuração. Deve-se destacar que a utilização de interfaces deixa o código mais limpo e mais fácil de configurar o container, sendo necessário apenas criar referências às classes que as implementam no arquivo de configuração (XML). Também é importante frisar que estes dois conceitos apesar de trabalharem em conjunto, como explicados, possuem significados totalmente diferentes.

Módulos de desenvolvimento

O spring.net oferece diversos módulos que podem ser utilizados em diversos projetos, de acordo com sua aplicabilidade, os mesmos para desenvolvimento Web, persistência, acesso remoto e aspectos.
A biblioteca está dividida em vários módulos, dentre eles os principais são:

Spring.Core: Este modulo é responsável por criar a arquitetura de inversão de controle IoC, onde é realizado o mapeamento (criação do contexto), e posteriormente a injeção de dependência.
Spring.Data: Esta camada é responsável por criar o acesso à base de dados através de transações diretas. Em outras palavras, é possível realizar a persistência no banco de dados por conta do Spring.net, inclusive utilizando conceitos ADO.NET de uma forma bastante simples.
Spring.AOP: Modulo correspondente a Programação Orientada a Aspectos, onde é fundamentada grande parte do framework. É capaz de encapsular aspectos específicos do sistema, separando-os em módulos e através de pointcuts o comportamento dos métodos são alterados.
Spring.Web: Esta camada será responsável por realizar injeções de dependência em páginas Web. Ao desenvolver uma aplicação Asp.NET Webforms é possível elevar ao máximo sua abstração, bastando apenas configurações simples no arquivo Web.config.

É importante lembrar que todos os modulos do framework Spring.net são indepentes, As várias possibilidade de utilização das funções fica por conta do programador.
É possível sim, desenvolver um sistema com baixo acoplamento entre camadas, sem a utilização do Spring.net, porém, este framework serve como um facilitador desta tarefa, fazendo-se utilização de conceitos explicados anteriormente. Para exemplificar todo o conteúdo estudado até então, vamos desenvolver uma pequena aplicação Web, e deixar bastante explicito as qualidades do framework, desta forma, o desenvolvedor pode ter uma melhor noção se há vantagens no desenvolvimento de uma aplicação utilizando Spring.net ou ainda uma eventual migração para esta tecnologia.

Aplicações em momentos de compilação:
Weaving - é um programa que integra classes e aspectos em tempo de compilação ou tempo de execução. Em tempo de compilação pode ser utilizado, por exemplo, o Gripper-Loom.NET que é um compilador que cria de forma estática, antes da execução, aspectos e seus advices que integra entre classes através de Weaver.
DevMan - O uso do paradigma Orientado a Aspecto (AOP) complementa implementações no modelo orientado a objeto facilitando o desenvolvimento das aplicações, separando a implementação de regras de negócio de infraestrutura.AOP traz mecanismos que interagem e controlam objetos em tempo de execução e compilação, abstraindo qualquer implementação que afetará o uso da aplicação horizontalmente. O corte horizontal na aplicação é feito quando funcionalidades genéricas que interagem diversas vezes no ciclode vida dos objetos são candidatas a esta abstração por parte de um aspecto.

“O Spring Roo depende das declarações de tipos Internos do AspectJ (ITDs) para algumas funcionalidades. Uma IDT é uma aspecto descrito por uma sintaxe comum Java inserida em classes Java em tempo de compilação. O Spring Roo gerencia as ITDs, reagindo as mudanças nas classes Java que ele depende. Por exemplo: dado uma classe anotada com @RooToString, o Spring Roo pode gerar, ou atualizar, um método toString() em um aspeto que enumera todas as variáveis da classe. Esse método é compilado no .class resultante, evitando que o desenvolvedor tenha que, manualmente, escrever tal código”.

Implementação
O exemplo utiliza a seguinte estrutura:

dynamic-environment-project-structure1.png

Conclusão
O Spring possui ferramentas poderosas para desenvolvimento, camadas em diversas aplicações com rapidez e flexibilidade assim, o Spring.NET com seus módulos de integração fazem frente aos, já estabelecidos, frameworksNinject, StructureMap, Castle Windsor e Unity tendo semântica idêntica ao java. Assim como os compiladores os frameworks, de um modo geral, facilitam a vida dos programadores criando uma interface de comunicação mais usual.
*O Spring pode ser baixado em http://www.springframework.net

Referências:

http://elemarjr.net/2011/02/13/sete-verdades-sobre-patterns-arquiteturais/
http://ericlemes.com/2009/03/12/dotnet-spring-pt1/
http://www.springframework.net
http://www.devmedia.com.br/spring-net-net-magazine-78/18220
http://www.infoq.com/presentations/Introduction-to-Spring-NET-for-Java-Developers?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_presentations_clk
http://mtc-m17.sid.inpe.br/col/sid.inpe.br/mtc-m17%4080/2006/12.08.13.39/doc/p145.pdf
http://www.infoq.com/presentations/pollack-intro-spring
http://www.infoq.com/br/news/2010/08/spring_roo_gwt
http://ramonzaccaron.blogspot.com.br/2010/10/desenvolvendo-aplicacoes-web-com.html

[[http://pesquompile.wikidot.com/visao-principais-frameworks-java]]


[[http://pesquompile.wikidot.com/dotnet-compact-framework]]


Ucsal 2013.1
Diego Pereira de Araujo
Jean Santos
João Vitor

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License