Arquivos da categoria : Delphi Hibernate


DHibernate – Features Explained Parte II

Leia também:

 

  • DHibernate – Features Explained Parte I

 

ITransaction

Opcional. Utilizada para gerenciar transações do banco de dados. Representa um objeto de vida curta para controlar unidades de trabalho atômicas.

Qualquer comando enviado para o banco de dados é controlado por uma transação, o DHibernate criará uma transação automaticamente sempre que necessário.  Uma ISession pode conter várias ITransaction.

Se a transação for criada manualmente, deve ser finalizada com Commit ou RollBack.

IQuery

Interface utilizada para executar queries no banco de dados e controlar como a query é executada.

Se precisar limitar os resultados de uma consulta, como o número máximo de linhas ou especificar a partir de que linha deseja recuperar, é necessário obter uma instancia de IQuery.

Utilize ISession.CreateQuery para obter uma nova IQuery.

ICriteria

Usada para criar dinamicamente queries orientadas a objetos e executá-las.

ICriteria representa uma query para uma classe persistente em particular.


DHibernate – Features Explained Parte I

Este é o primeiro artigo sobre as features do DHibernate.

Vou publicar uma série de artigos contendo explicações sobre a implementação do framework de persistência.

A publicação neste blog é para manter a referência do DHibernate em português, depois ele será traduzido para inglês e enviado para a revisão, e só então publicado no wiki do projeto.

IConfiguration

É a primeira classe a ser instanciada e contêm as configurações que identificam o Driver e Dialeto do banco de dados, classes de Cache e Transação e outras configurações que alteram o comportamento do framework.

Além de armazenar todos estes parâmetros esta classe validará as informações:

  • Arquivos externos de configuração.
  • Se os parâmetros de conexão do banco de dados estão corretos.
  • Carregar e validar os metadados de mapeamento das classes.
  • Carregar e validar as instruções sql pré-definidas como NamedSql.

Após toda a configuração estar carregada e validada é possível obter uma instancia de ISessionFactory, contendo todas estas configurações prontas para serem usadas, não sendo necessário efetuar nenhuma carga ou validação.

Deve ser criada uma IConfiguration para cada banco de dados ou para cada Schema, pois tudo será validado antes de se obter uma ISessionFactory.

ISessionFactory

É pesada, deve ser criada somente uma vez e compartilhada por todas as threads, então a implementação deve ser threadsafe.

Normalmente existe apenas uma instancia para toda a aplicação. Se for necessário conectar a mais de um banco de dados, deve ser criado uma instancia de ISessionFactory para cada conexão.

A única configuração carregada diretamente é  INameStrategy, que deve ser feita antes de se criar uma ISession, pois ela define as regras de como o framework vai gerar  nome de Tabelas, Colunas , Índices, Chaves Primárias e Estrangeiras.

ISessionFactory faz cache de intruções SQL geradas e metadados do mapeamento utilizados em tempo de execução.

Além de criar novas instancias de ISession, é responsável por guardar a referencia das ISession sendo utilizada através da propriedade CurrentSession.

ISession

É leve e pode ser criada sempre que necessário. Principal Interface, pois encapsula o Database Provider e todos os objetos necessários para a comunicação direta com o banco de dados. Também responsável pela criação de Transações.

Expõe métodos para localizar, salvar, atualizar e excluir objetos, também conhecida como Persistence Manager.

Após uma conexão ser estabelecida, é criado um cache de acordo com os parâmetros definidos em IConfiguration. Este cachê armazenara a referencia de todos os objetos persistentes, criados pelo usuário e salvos, ou recuperados do banco de dados. Pode ser considerada como uma coleção de objetos persistentes relacionados a uma única unidade de trabalho. Ver o Design Pattern Unit of Work.

Próximo Artigo:

  • ITransaction
  • IQuery
  • ICriteria

Delphi Hibernate

Objetivo

O projeto Jazz SDK precisava ser renovado, e desde que o publiquei, o Hibernate e o NHibernate se popularizaram e amadureceram, desta forma é natural a utilização do design e experiência existente nesta nova versão, para que os usuários e desenvolvedores utilizem toda a base de conhecimento já existente.

Deste ponto em diante, será utilizado à abreviação “XH” como referencia a “Hibernate e NHibernate”.

O desenvolvimento está sendo feito com o Delphi XE2, vários recursos utilizados só estão presentes a partir do Delphi 2010, mas somente após testar todo o framework em cada versão de Delphi, poderei dizer quais versões serão oficialmente suportadas, espero ter a ajuda de colaboradores para estes testes.

O framework DSharp será utilizado evitando duplicação de funcionalidades, restando mais tempo para focar nos recursos exclusivos do ORM.

Agradecimentos ao autor do DSharp, Stefan Glienke, por autorizar a utilização desta maravilhosa biblioteca.

Recursos

  • Uma versão futura com os recursos da versão mais atual do XH é planejada, no momento foi selecionado um subconjunto destes recursos que são os necessários para projetos atuais.
  • Todos os recursos selecionados seguirão o modelo já definido no XH sendo ajustado aos recursos do Delphi.
  • Qualquer outro recurso sugerido deverá primeiramente seguir o modelo XH, e outros qualquer outro caso será analisado antes de ser aceito.
  • Lista completa de Recursos da versão 1.0 http://code.google.com/p/delphi-hibernate/wiki/Features

Regras para colaboradores

O desenvolvimento será aberto e seguirá regras para manter a qualidade e o propósito:

  • O design deve seguir as especificações das API’s do XH, ajustadas aos recursos do Delphi.
  • Todo o código deve ser acompanhado de testes
    • DUnit
    • DSharp.Testing.Mock
  • Deverá ser criada a documentação correspondente ou pelo menos a referencia a documentação existente no XH.
  • A versão de desenvolvimento deve sempre ser compilável, mesmo que o recurso não esteja finalizado.
  • O código deve ser formatado de acordo com as regras definidas, um documento com  as regras será publicado junto com o arquivo de configuração de formatação do Delphi.
  • Para a colaboração ser aceita, deve ser solicitada a revisão do código, somente após os revisores aprovarem, o código será adicionado ao repositório principal.
  • Desejável um programa exemplo, compilável e com todas as dependências inclusas.

Projeto

O projeto está hospedado no Google Code no endereço: