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/

4 comentários:

Augusto disse...

Henrique,

Na minha época, a tentativa de utilizar "ferramentas" (naquele tempo não conheciamos o termo framework) como o Castle (apesar de eu gostar bastante do Hamilton) acabavam dando "M".

Quando chegava a hora de fazer uma transação complexa, só coding na unha mesmo!

O que vc pensa sobre esta parte (a de transações complexas)? Indica um framework assim mesmo?

[]s Augusto Camargo

Henrique Avila disse...

Augusto,

Pela experiência adquirida nos últimos meses eu indico utilizar frameworks como o Castle ActiveRecord em aplicações de complexidade baixa ou até média.

Como o Castle utiliza o nhibernate para persistir os dados, quando nos deparamos com tarefas um pouco mais complexas no SGBD, podemos utilizar uma linguagem chamada HQL (que é parecida com o SQL, porém é independente do SGBD para o qual se está programando).

Na minha opinião, é melhor depender pouco (aplicações de média complexidade) ou nada (aplicações de baixa complexidade) do HQL pois ele torna o desenvolvimento mais demorado devido a sua dificuldade de teste e debug. Muitas vezes desenvolver uma Query HQL complexa é mais demorado do que desenvolver todas as camadas de dados e acesso à dados.

Uma boa alternativa para agilizar o desenvolvimento e que tem um suporte melhor à tarefas complexas é o Linq da Microsoft, lançado recentemente e que integra o .Net Framework 3.5, em breve postarei algumas opiniões sobre ele.

Abrassss!

Unknown disse...

The King Casino: Best Casino Software and Games
The 출장마사지 King ventureberg.com/ Casino software company is well-known in the world of online https://vannienailor4166blog.blogspot.com/ casino games. It has been in 출장안마 business since 2001, but it now offers live dealer casino casino-roll.com games

Anônimo disse...

Welcome bonuses reward gamers after they make their first actual cash deposit. The precise phrases and requirements differ from casino to casino and some provides that appear too good to be true in all probability might be. Before you commit your cash, we 코인카지노 recommend checking the wagering requirements of the web slots casino you are planning to play at.