terça-feira, 29 de abril de 2008

Desenvolvimento de Aplicações Web Utilizando Castle ActiveRecord

Olá! Neste post pretendo apresentar o framework de persistência de dados Castle ActiveRecord, com o qual tenho desenvolvido algumas aplicações nos úlimos meses.
Com ele, o desenvolvimento de software pode se tornar muito mais simples e rápido, diminuindo a quantidade de código que o desenvolvedor tem que produzir e facilitando o mapeamento entre o mundo relacional da maioria dos SGBDs comerciais de hoje para o mundo dos objetos, das nossas aplicações .Net. Porém, a desvantagem fica por conta da menor flexibilidade para manipular os dados através dele.

Quem já conhece ou utiliza o nhibernate, o Castle ActiveRecord pode ajudar facilitando a configuração do nhibernate. Com o ActiveRecord não há necessidade de configurar xml para criar os mapeamentos do nhibernate!

A primeira diferença entre desenvolver uma aplicação sem utilizar nenhum framework de persistência de dados e desenvolver uma aplicação utilizando o Castle ActiveRecord é a arquitetura das camadas do software, numa aplicação comum, teríamos as seguintes camadas:
  • Camada de Apresentação (Páginas ASP.Net, por exemplo, é o que o usuário vê)
  • Camada de Controle (As classes que controlam a Apresentação, como o code-behind das páginas ASP.Net e fazem com que aquilo que o usuário vê realize operações)
  • Camada de Negócio (Com os procedimentos do negócio, contém as operações seguindo as regras estipuladas nos requisitos)
  • Camada de Transferência de Dados (também conhecida como Value Objects, é onde temos os principais objetos do sistema)
  • Camada de Acesso à Dados (nela, os dados gerados na aplicação são enviados ao SGBD, e os dados deste são recuperados para serem utilizados na aplicação - geralmente aqui acontece a transformação da forma relacional para a forma dos objetos)
  • Camada de Dados (normalmente dentro do SGBD, programada com Stored Procedures)
Em projetos simples, podemos encontrar uma simplificação da arquitetura acima que dispensa a camada de negócio, que ficaria assim:
  • Camada de Apresentação
  • Camada de Controle
  • Camada de Transferência de Dados
  • Camada de Acesso a Dados
  • Camada de Dados
Já em projetos utilizando o Castle ActiveRecord, teríamos a seguinte arquitetura:
  • Camada de Apresentação
  • Camada de Controle
  • Camada de Modelo (esta nova camada fará o trabalho das 3 últimas camadas do último exemplo, com o mínimo de programação)
Esta arquitetura é conhecida como MVC (Model-View-Control) ou Modelo-Visualização-Controle. De início já notamos que temos duas camadas a menos, só isso já poupa um bocado de desenvolvimento.

Dentro da camada de Modelo, que é onde ficará o código que utilizará o Castle ActiveRecord, acontecerá o seguinte:
As classes serão feitas da mesma forma como eram feitas na Camada de Transferência de Dados, porém todas as classes deverão herdar a classe ActiveRecordBase, que se encontra no framework. A classe deverá, também, ser configurada através de um parâmetro, indicando qual tabela do SGBD aquela classe representa.
As propriedades das classes deverão ser configuradas indicando a qual atributo da tabela elas se referem e se ela é chave primária, um relacionamento com outra tabela, etc.

Exemplo simples de classe em VB (.Net Framework 2.0):

Para a seguinte tabela:

Create Table tbFuncionario(
ID Int,
Nome VarChar(100),
Matricula Char(6))

Teríamos a seguinte classe:


Imports Castle.ActiveRecord

<Activerecord("tbFuncionario")> _
Public Class Funcionario
Inherits ActiveRecordBase(Of Funcionario)

Private _ID As Integer
Private _Nome As String
Private _Matricula As String

<PrimaryKey("ID")> _
Public Property ID As Integer
Get
Return _ID
End Get
Set (ByVal Value As Integer)
_ID = Value
End Set
End Property

<Property("Nome")> _
Public Property Nome As String
Get
Return _Nome
End Get
Set (ByVal Value As String)
_Nome = Value
End Set
End Property

<Property("Matricula")> _
Public Property Matricula As String
Get
Return _Matricula
End Get
Set (ByVal Value As String)
_Matricula= Value
End Set
End Property
End Class


Pronto! Com a classe acima já é possível fazer Select, Insert, Update e Delete na tabela tbFuncionario!

Como?

O Castle ActiveRecord (através do nhibernate) gerará os códigos SQL em runtime para fazer as operações no SGBD. A segunda grande vantagem disso (a primeira vantagem foi a economia de código) é que apenas mudando um parâmetro na configuração do nhibernate, a aplicação poderá utilizar SQL Server, Oracle, ou qualquer outro SGBD suportado pelo nhibernate.

Veja mais informações sobre o Castle ActiveRecord e outros framewors do projeto Castle em:
http://www.castleproject.org/

Veja mais informações sobre o nhibernate em:
http://www.nhibernate.org/

Seja Bem Vindo!

Seja bem-vindo ao meu recém-criado blog!!! Pretendo expor neste espaço dicas, novidades e opiniões sobre tecnologia e desenvolvimento de software.
Sou estudante universitário, desenvolvedor ASP.Net com 4 anos de experiência e estou trabalhando atualmente em projetos voltados às áreas de Marketing, Endomarketing e e-commerce.
Espero trazer informações úteis e ajudar a todos compartilhando soluções dos problemas que eu enfrentar no dia-a-dia.