Do que trata o artigo: A persistência de dados toma grande parte do tempo de desenvolvimento de nossos sistemas. Neste artigo veremos como automatizar essas tarefas repetitivas de forma elegante, usando uma ferramenta OR/M (mapeamento objeto relacional). Com seu uso poderemos utilizar objetos de negócio em nossos sistemas e não nos preocuparmos como recuperá-los ou mandá-los para um banco relacional. Vamos ver a teoria por trás de uma ferramenta de mapeamento objeto/relacional, como o NHibernate, e como isso pode melhorar nosso desenvolvimento diário.
Para que serve:
Uma ferramenta de persistência tem a tarefa de saber como salvar seus objetos em memória, para um dispositivo
físico. Isso é feito através do mapeamento objeto relacional, onde apontamos qual campo será utilizado para
armazenar determinada propriedade e qual classe/classes representam uma ou mais tabelas.
Em que situação o tema é útil:
Quando se deseja utilizar a orientação a objetos para representar seu negócio, contudo, sem perder a facilidade
de acesso a banco de dados. Quando se deseja ter uma aplicação realmente independente do banco de dados que é
utilizado, sem se preocupar com detalhes específicos de cada um.
O NHibernate é uma ferramenta de mapeamento objeto relacional que implementa teorias conceituadas sobre o assunto. Ele vem trazer uma ponte de comunicação entre seus objetos de negócio e seu banco de dados, que podem ser bem diferentes. Isso traz vários benefícios, mas também dificuldades. Um dos benefícios é que suas regras de negócio serão independentes de banco de dados. Para mostrar tudo isso, vamos desenvolver uma aplicação desktop onde nenhum SQL será utilizado, em momento algum. Vamos utilizar um banco de dados Firebird para salvar os objetos criados.
Você, desenvolvedor Delphi, como a grande maioria de usuários, certamente desenvolve aplicações do tipo desktop, em duas ou três camadas. São aplicações centradas em dados, como são conhecidas. É muito comum nesses cenários fazermos a análise do negócio envolvido e já partirmos para o desenvolvimento do banco de dados, onde posteriormente será acessado por controles Data-aware e seus dados manipulados por sentenças SQL geradas por nós mesmos. Ou seja, além de nos preocupar com as regras envolvidas, temos também a responsabilidade de acessar o banco de dados e utilizá-lo. Quero deixar claro que não há nada de errado nisso. Isso tem funcionado muito bem até hoje, contudo, novas técnicas surgiram. Técnicas essas que proporcionam maior flexibilidade, agilidade ao desenvolvimento e diminuem tarefas repetitivas, retirando dos desenvolvedores a preocupação da persistência dos dados. Uma dessas técnicas é a orientação a objetos. Muito se fala nela no mundo Delphi, mas pouco se aplica de verdade. Para mostrar como utilizá-la faremos uma pequena agenda de contatos utilizando o Delphi Prism como linguagem de desenvolvimento, a plataforma .NET e NHibernate como ferramenta objeto relacional. Quanto ao banco de dados, não interessa porque o NHibernate é compatível com cerca de mais de dez produtos existentes no mercado. Vamos começar pelos conceitos que servem de apoio e alicerce.
Persistência de dados
A persistência, de uma forma geral, é a tarefa de pegar informações contidas em um meio volátil e passá-las para um meio não volátil. Sendo mais específico, é pegar os dados que estão na memória e mandá-los para um HD. Ao se falar de sistemas comerciais, esses dados serão salvos em um banco de dados relacional. Nessa tarefa de persistência temos sub-rotinas, operações, que acontecem o tempo todo durante a execução de um sistema. Esse é o CRUD. Operações de acesso a dados que cuidam da criação, recuperação, atualização e exclusão das informações contidas em um banco de dados.
Impedância objeto/relacional
Esse é o nome que se dá para as diferenças existentes entre seu banco de dados e seus objetos de negócio. Para exemplificar, imagine que no seu modelo classes temos Pessoa e Endereço. Classes distintas, mas possuem um relacionamento entre si. Pessoa possui em sua interface uma referência à classe Endereço, representando que uma pessoa tem um endereço. Contudo em seu banco de dados você pode ter apenas uma tabela para armazenar as duas informações.
Mapeamento objeto/relacional
É a operação que visa diminuir a impedância, as diferenças entre o objeto e o relacional. É o local onde definimos como os objetos serão salvos e recuperados do banco de dados. É onde informamos qual classe se torna uma tabela, qual propriedade se torna um campo. Toda ferramenta que se intitula objeto/relacional (ORM) faz de alguma forma esse mapeamento e oferece meios para pesquisa dos objetos salvos. Existem pequenas definições que se aplicam quando vamos fazer um mapeamento objeto relacional. Veremos com mais detalhes durante o desenvolvimento do projeto.
Mãos à obra
Como já mencionado, vamos utilizar o Framework .NET, Delphi Prism, NHibernate e Firebird para o desenvolvimento de nossa agenda. Nossa agenda irá permitir a inclusão de pessoas, seu endereço, email e telefones. Deverá também oferecer uma forma rápida para localização das pessoas cadastradas. Para começar vamos abrir o Visual Studio 2008 e então acessamos o menu File > New > Project. Configure o projeto como mostra a Figura 1.
Observe que selecionamos a opção Windows de Delphi Prism. Desta forma vamos criar uma aplicação utilizando Windows Forms, que é bem semelhante aos formulários do Delphi win32. Observe também que escolhemos o Framework .net na versão 3.5, o que nos garante utilizar os recursos mais atualizados do mesmo.
O .NET Framework foi desenvolvido de tal forma que possamos utilizar várias linguagens para o desenvolvimento de sistemas. Existem várias linguagens compatíveis, por exemplo, temos Visual Basic, uma versão do Java conhecida como J#, temos C#, F#, Cobol, o próprio Delphi e muito mais. No caso específico do Delphi, ele funciona como um Plugin dentro do Visual Studio, que é o IDE de desenvolvimento fornecido pela Microsoft. É uma versão evoluída da linguagem Delphi que conhecemos. Nela foram implementados recursos avançados oferecidos pelo .NET Framework. Veja onde baixar o Delphi Prism na seção links.
Ao clicarmos em OK temos um projeto com um formulário principal já criado. Como vamos utilizar a orientação a objetos vamos primeiramente desenvolver as classes de negócio envolvidas. Vamos centralizá-las em um projeto do tipo Class Library. Um projeto desse tipo nada mais é do que uma DLL que pode ser reutilizada em vários projetos. Para criá-la clicamos com o botão direito no nome da solução (Agenda) e no menu que surge, escolhemos Add>New Project. Então, escolhemos Class Library, como mostra a Figura 2. Nesse momento seu Solution Explorer deve se parecer com a Figura 3.
Veja que temos um arquivo chamado Class1.pas. Clique com o botão direito nele, no menu que aparece escolha Rename e mude seu nome para Pessoa.pas. Altere o nome da classe também no código, para que fique como mostra a Listagem 1.
namespace ModeloAgenda;
interface
type
Pessoa = public class
private
protected
public
end;
implementation
end.
Em nosso sistema, uma pessoa terá um Nome, um Endereco, vários Telefones e um Email. Sendo assim vamos alterar a classe pessoa para que reflita essa definição e fique como mostra a Listagem 2.
type
Pessoa = public class
private
protected
public
property Nome: String;
property Endereco: Endereco;
property Telefones: IList<Telefone>;
property Email: String;
constructor; end;
implementation
constructor Pessoa;
begin
Endereco := new Endereco;
Telefones := new List<Telefone>;
end;
Veja que agora definimos as propriedades mencionadas. O detalhe fica para a propriedade Endereco, que é do tipo Endereco, uma outra classe que ainda não foi implementada. E também para Telefones, que é uma lista genérica do tipo Telefone, que também ainda não foi implementada. Vamos fazê-lo agora. Clique com o botão direito sobre o projeto ModeloAgenda e escolhe Add>New item. Nessa janela que abrir vamos escolher Class, dando o nome de Telefone. A classe estará vazia. Contudo vamos alterá-la para que fique como na Listagem 3.
type
Telefone = public class
private
protected
public
property Numero: String;
property Ramal: String;
end;
Até o momento então temos as classes Pessoa e Telefone. Veja que definimos telefone com duas propriedades do tipo string, Numero e Ramal. Falta fazermos agora a classe Endereco. Adicione uma nova classe, lhe dê o nome de Endereco e a codifique como na Listagem 4.
Endereco = public class
private
protected
public
property Rua: String;
property Bairro: String;
property Cidade: String;
property UF: String;
constructor ();
end;
implementation
constructor Endereco();
begin
Cidade := "Jaboticabal";
UF := "SP" ;
end;
Vejam que dessa vez temos algo novo. Além das propriedades esperadas para um endereço, incluímos um construtor para a classe. Fazemos isso porque quero que, sempre que um endereço for criado, a Cidade seja “Jaboticabal” e a UF “SP”.
...Confira outros conteúdos:
Instalando o ACBr
Mapeamento Objeto-Relacional com TMS...
Introdução aos componentes JEDI
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.