Leia os artigos anteriores:
NHibernate – usando o ActiveRecord – Parte 02
NHibernate – usando o ActiveRecord – Parte 01
*
Na primeira parte desta série de artigos eu
apresentei o ActiveRecord e depois mostrei uma exemplo prático
de sua utilização com o NHibernate, mostrando como ficou fácil
gerar os arquivos de mapeamento XML.
Agora, veremos mais uma característica do
NHibernate e que, na verdade, é um dos principais motivos para sua
utilização: a portabilidade da sua aplicação para outro
gerenciador de banco de dados. Para ilustrar o exemplo, eu vou
pintar um cenário hipotético abusando das ilustrações.
Imagine que você está trabalhando
como programador ou programador analista ou programanalista em
uma empresa na qual desenvolveu o sistema que atualmente está em
uso.
Agora imagine que, em uma sexta-feira,
você chega no serviço todo contente, afinal é sexta-feira, e
logo ao chegar você é avisado que o seu chefe deseja falar com
você com urgência.
Na sala do chefe você recebe a fatídica
notícia: por um problema com o fornecedor, o contrato para
utilização do banco de dados que a empresa está usando não
será renovado e ele deverá ser trocado com máxima urgência
até segunda-feira (Estamos na sexta, lembra? ). Você está recebendo a notícia somente a 3
dias de ter a nova versão do banco de dados em produção, pois havia uma
expectativa de renovação que não se concretizou.
Resumindo: o
pepino (como sempre) sobrou para a área de TI.
Ao ouvir tal notícia você tentou
argumentar que deveria ter sido avisado com antecedência mas,
para resumir, não teve jeito, e você vai ter que trocar o banco
de dados atual da sua aplicação por um banco de dados open
source. E o escolhido foi o MySQL.
Você terá que criar o banco de
dados, as tabelas, e importar os dados, mas esse não é o maior
problema. O problema é que você vai ter que mudar toda a sua
aplicação para acessar outro banco de dados, e isso em 3
dias, considerando que você vai ter que trabalhar sexta, sábado
e domingo para que o sistema esteja no ar na segunda, usando
o novo banco de dados.
Neste momento você pode ter duas
reações, dependendo de como o seu projeto atual foi desenvolvido:
01. O seu projeto foi desenvolvido
sem qualquer organização e é composto por centenas de
formulários onde se misturam regras de negócio, lógica de
acesso a dados e código para apresentação.
Neste
cenário você vai ficar muito bravo, pois vai ter
que ralar no final de semana, alterar milhares de linhas de código, trabalhando direto para
fazer a migração da aplicação para usar o novo banco
de dados MySQL sem saber se ao final as coisas vão
funcionar, pois não terá tempo de testar.
“Por
que eu não segui o conselho do Macoratti e não adotei
as boas práticas como uma arquitetura em camadas, padrões
de projeto e os recursos da orientação a objetos? “
02. O seu projeto foi desenvolvido
com base nas boas práticas de programação usando uma
arquitetura em camadas, padrões de projeto e, para melhorar a
situação, você usou o NHibernate e ActiveRecord na sua camada
de acesso a dados, pois já previa que poderia haver uma mudança
no gerenciador de banco de dados que a empresa estava usando.
Neste
cenário você sente que chegou o momento de mostrar a
sua competência, pois vai conseguir efetuar a migração
com pouco esforço. Na verdade, você nem vai ter que
trabalhar no final de semana, pois o trabalho será apenas
criar o banco de dados e as tabelas com a mesma estrutura
no MySQL, e na sua aplicação você vai ter que apenas criar um novo
arquivo de configuração sem ter que mexer no código.
“Ainda bem que eu
segui o conselho do Macoratti e adotei as boas práticas
usando uma arquitetura em camadas, padrões de projeto e
os recursos da orientação a objetos.”
Embora o cenário possa ser
hipotético (e um tanto exagerado), ele não é impossível de acontecer e, como
desenvolvedores, devemos estar sempre preparados para contornar os
problemas
que com certeza iremos encontrar na profissão.
Para ilustrar como é simples
efetuar a migração de um banco de dados para outro quando se
usa o NHibernate, eu vou usar o exemplo já abordado na segunda
parte deste artigo onde usamos banco de dados SQL Server e vou
migrar a aplicação para usar o MySQL.
A primeira coisa a fazer é criar o
banco de dados e as tabelas no MySQL. Abaixo temos a estrutura do
banco de dados SQL Server e das tabelas usadas pela aplicação:

Temos que ter cuidado na criação
do banco de dados e das tabelas, pois devemos manter a mesma
estrutura e os mesmos tipos de dados usados pela aplicação.
Usando o MySQL Administrator
vemos abaixo o novo banco de dados Clientes e a
tabela a nova Contatos criada no MySQL:

Após migrar os dados, vamos fazer a alteração na aplicação para
acessar o novo banco de dados e as tabelas no MySQL.
Será que teremos que alterar alguma linha de código
? Não, iremos mudar só o arquivo de configuração.
Para isso basta alterar o arquivo
AppConfig.xml conforme abaixo:
<?xml version="1.0" encoding="utf-8" ?><br /><activerecord><br /> <config><br /> <add<br /> key="connection.driver_class"<br /> value="<strong>NHibernate.Driver.MySqlDataDriver</strong><strong>"</strong> /><br /> <add<br /> key="dialect"<br /> value="<strong>NHibernate.Dialect.MySQLDialect"</strong> /><br /> <add<br /> key="connection.provider"<br /> value="<strong>NHibernate.Connection.DriverConnectionProvider</strong>" /><br /> <add<br /> key="connection.connection_string"<br /> value="<strong>Server=localhost;Database=clientes;User ID=root;Password=xxxxxx"</strong> /><br /> <add<br /> key="proxyfactory.factory_class"<br /> value="<strong>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</strong>" /><br /> <add<br /> key="hbm2ddl.keywords" value="none" /><br /> </config><br /></activerecord>Observe que alteramos as
informações referentes ao banco de dados usado, como:
driver de
conexão, dialeto, string de conexão, etc.
Conseguimos, assim, portar uma
aplicação que usava um banco de dados SQL Server para usar um banco de dados
MySQL sem ter que mudar uma única linha de código, mexer em uma única regra de
negócio.
Fazendo apenas esta alteração já
podemos rodar a aplicação e verificar o seu funcionamento:

Você aproveitou um momento de crise, mostrou a sua competência e no final da sexta-feira teve mais
um motivo para comemorar! Tudo isso graças ao NHibernate e ao ActiveRecord.
Pegue o projeto completo aqui: NHibernateActiveRecordDemoMySQL.zip (sem as dlls das referências)
Eu sei, é apenas NHibernate, mas eu
gosto…








