Sistema MinhaClínica

Durante esta semana cheguei a uma conclusão a respeito do projeto que será desenvolvido. Será um controle de fichas de pacientes médicos. Durante o desenvolvimento vamos explorar os requisitos. Originalmente esse pequeno sistema foi desenvolvido por mim em Delphi possuindo como base de dados um banco Firebird 2.0. A idéia por traz deste projeto é mostrar como o desenvolvimento OO pode facilitar nossas vidas de desenvolvedores. E para iniciar quero expor minhas razões do porque utilizar uma ferramenta ORM, em especial o NHibernate.

Porque usar uma ferramenta ORM:

Há vários anos os bancos de dados relacionas são utilizados como armazenamento de dados e sua eficiência para isso não se discute. Com o passar do tempo vários recursos foram adicionados aos SGBDs, como recursos de relatórios e até mesmo de geração de interface. Nesse mesmo tempo as tecnologias para desenvolvimento de sistemas, a programação propriamente dita, também evoluíram em resposta aos novos desafios que lhe eram impostos.

Por exemplo os prazos foram diminuindo, novas plataformas como WEB e dispositivos móveis se popularizaram, a variedade de banco de dados relacionais existentes sem contar com a necessidade de se melhor representar o mundo real. Por esses e outros motivos a programação OO tem se firmado e crescido em uso.

Ao utilizar OO como programação possuindo um banco relacional como fonte de dados será percebido o que formalmente é conhecido como “impendância objeto/relacional”. Isso se dá ao fato de que os objetos de negócio podem ser representados de forma diferente em um banco relacional. Por isso que surgiram as ferramentas ORM. ORM significa Object Relational Mapping, mapeamento objeto relacional.

Uma ferramenta ORM tem por objetivo diminuir as diferenças entre objetos e tabelas de um SGBD. Devem oferecer formas para o desenvolvedor definir como que seus objetos serão persistidos (salvos) de forma física, e até mesmo como podem ser obtidos e manipulados do SGBD.

Se você ainda não compreendeu imagine uma classe Pessoa que possui os seguintes atributos: Nome, RG, Endereço, sendo que Endereço é uma outra classe que possui os atributos Logradouro, Número, Complemente, Bairro, Cidade, Estado e CEP. Como vamos salvar esse objeto? Em que banco de dados? Para qual tabela? Em quais campos? É isso que uma ferramenta ORM oferece e utilizando uma poderíamos responder as questões acima da seguinte forma, a classe Pessoa é mapeada para uma Tabela Pessoa, e a classe Endereço poderia ter seus atributos mapeados para a mesma tabela Pessoa.

Além de permitir isso, uma ferramenta ORM deve abstrair o banco de dados, seu acesso, sua manipulação através de SQL e até mesmo sua troca para permitir que o desenvolvedor mantenha o foco no que creio ser realmente importante, as regras de negócios que serão aplicadas ao sistema em desenvolvimento.

Porque utilizar o NHibernate ?

Além de oferecer os recursos comuns a qualquer ferramenta ORM que se preze temos:

  • Free – Além de ser free é open source.
  • Otimizações para cada SGBD que suporta – O NHibernate possui o conceito de dialetos que são otimizações de cada SGBD suportado. Por exemplo para se retornar os 10 primeiros registros de um consulta o ORACLE pode oferecer um comando particular que traz mais desempenho para a consulta. Igualmente pode acontecer com o SQL Server, MySQL ou Firebird. É aí que entram os dialetos. Cada dialeto implementa as peculiaridades de SQL dos gerenciadores SQL suportados. Isso significa que independentemente do banco de dados utilizado, sua aplicação o está utilizando da melhor forma.
  • Suporte à Stored Procedures – para os mais “tradicionais”, ou em algum momento de performance, pode-se especificar que uma determinada classe será carregada por uma stored procedure. Eu particularmente nunca tive a necessidade de substituir minhas sentenças por uma stored procedure.
  • Segurança contra SQL Injection – Esse é um problema que é resolvido facilmente com o NHibernate porque todo SQL gerado é parametrizado e fortemente tipado, além de que para o desenvolvedor seu uso está encapsulado.
  • Suporte a Lazy Loading – Isso quer dizer que só são trazidos os dados que são utilizados, ou seja, são obtidos por demanda. Por exemplo a classe Pessoa citada anteriormente, os dados do atributo Endereço só seriam retornados se fizéssemos uma chamada a eles. Isso implica em melhoria de performance e menos consumo de memória.
  • Suporte Ativo – O fórum do NHibernate é muito ativo, uma questão lá é rapidamente respondida, podendo ser utilizado também como base de conhecimento.
  • “Parentes” ilustres – O NHibernate é um porte para .NET da tão aclamada ferramenta Hibernate. Troque uma idéia com qualquer desenvolvedor sério de Java e verá que esta é melhor ferramenta ORM.
Esse post foi publicado em NHibernate. Bookmark o link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s