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)
- Camada de Apresentação
- Camada de Controle
- Camada de Transferência de Dados
- Camada de Acesso a Dados
- Camada de Dados
- 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)
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/