orm: sendo produtivo com nhibernate

Post on 26-May-2015

5.286 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

Frameworks de mapeamento de objeto-relacional (ORM) são hoje ferramentas indispensáveis nos projetos de desenvolvimento de sistemas. E em se tratando de frameworks de ORM, um dos mais conhecidos e utilizados pela comunidade é o NHibernate. Nessa apresentação você verá os principais pontos que fazem dos frameworks de ORM e do NHibernate ferramentas tão importantes nos projetos, desmistificar seus maiores mitos, os principais recursos, ferramentas de análise (NHProof) e verá também como ser produtivo com o NHibernate.

TRANSCRIPT

NHibernateSendo preguiçoso com NHibernate

Juliano Oliveira

Preguiçalembra...

Preguiçalembra...

Preguiçalembra...

NHibernateSendo preguiçoso com NHibernate

Juliano Oliveira

NHibernateSendo preguiçoso com NHibernate

Juliano Oliveira

NHibernateSendo PRODUTIVO com NHibernate

Juliano Oliveira

Ser PRODUTIVO!

Agenda

Tópico 1

Tópico 2

Tópico 3

Tópico 4

Agenda

Mapeando seu modelo

Sendo produtivo com NHibernate

Exemplos práticos: A Hora do Show

Dúvidas

A vida sem ORM

Muito trabalho

Modelar Tabelas

Classes DAL

Objetos DTO

Camada BLL

Camada DAL

public UsuarioDAL{ public ArrayList<Usuario> retornaUsuarios(){ ..... }}Camada BLL

public UsuarioBLL { public ArrayList<Usuario> retornaUsuarios() { UsuarioDAL usuarioDAL = DALFactory.UsuarioDAL.Create(); return usuarioDAL.retornaUsuarios();

} }

Camada DTO

public class Usuario { private String _id; private String _nome;

public String Id() { get { return _id; } }

public String Nome() { get { return nome; } }

public Usuario(String usuarioID, String usuarioNome) {

this.usuarioID = usuarioID; this.usuarioNome = usuarioNome; } }

A vida sem ORM

A vida sem ORM

ORM

ORM é MAPEAMENTO DE OBJETO-RELACIONAL

A proposta do ORM◦Resolver a impedância entre OO e ER◦Facilitar o acesso a dados◦Tornar o trabalho mais ORIENTADO A OBJETOS

Banco Relacional

ORMEntidades

OO

O NHibernate mais de perto

Framework de ORMPortado do Hibernate escrito em Java para

.NetOpen-sourceLicença LGPL - uso comercialSistema de queries OO

◦HQL◦Criteria API

Gerenciamento de Sessões e Transações

O NHibernate mais de perto

Suporta conceitos de OO◦Associação, herança, polimorfismo, coleções,

etc...Suporta a maior parte dos banco de dados

relacionais do mercado◦SQL Server, Oracle, MySQL, PostgreSQL, SQLite,

etc ...Perfeito para uma arquitetura como o

DDD

O NHibernate mais de perto

ArquiteturaAplicação

Banco de dadosEntidades relacionais

NHibernate

Objetos de Persistência

configuração mapeamento

Configuração de conexão e banco de dados

Mapeamento dos objetos e entidades relacionais

Modele entidades, não tabelasModelando classes

◦Abstrações◦Entidades◦Objetos de Valor◦Coleções

Modele entidades, não tabelas

Mapeando seu modelo

ClasseCliente.cs

Cliente.hbm.xml Banco de dadosTabela Clientes

Mapeando seu modelo

Classe Cliente.cs

public class Cliente{ public virtual int Id { get; set; } public virtual string Nome { get; set; } public virtual string Endereco { get; set; }}

Mapeando seu modelo

Mapeamento Cliente.hbm.xml

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Cliente" table="Clientes"> <id name="Id" column="idCliente"> <generator class="hilo" /> </id> <property name="Nome" type="String" length="75" /> <property name="Endereco" type="String" length="150" /> </class></hibernate-mapping>

Mapeando seu modelo

Tabela Clientes

Mapeando seu modelo

Tags de mapeamento mais usadas◦class◦id◦property◦many-to-one◦one-to-one◦Tags para coleções

Mapeando seu modelo

Tags de mapeamento para coleções◦set

coleção de itens únicos◦bag

coleção de itens que podem se repetir◦list

uma “bag” indexada por um número inteiro◦map

uma “bag” indexada por um valor qualquer

Ser PRODUTIVO!

Sendo produtivo com NHibernateFerramenta de exportação e atualização

das tabelas do banco de dados

Com seu modelo pronto, crie suas tabelas no banco de dados com o seguinte comando:

Configuration cfg = new Configuration().Configure();SchemaExport generator = new SchemaExport( cfg );generator.Create(true, true);

Sendo produtivo com NHibernateFerramenta de exportação e atualização

das tabelas do banco de dados

Mudança no modelo? Fácil! Atualize o banco de dados com o seguinte comando:

Configuration cfg = new Configuration().Configure();SchemaUpdate update = new SchemaUpdate( cfg );update.Execute(true, true);

Sendo produtivo com NHibernateNunca mais escreva SQL´s

Cliente cliente = _sessao.Get<Cliente>(222);

Selecionar o “Cliente” de código “222”:

Sendo produtivo com NHibernateNunca mais escreva SQL´s

IList<Cliente> cliente;cliente = _sessao.CreateCriteria<Cliente>().List<Cliente>();

Selecionar todos as entidades “Cliente”:

Sendo produtivo com NHibernateNunca mais escreva SQL´s

string strQuery = “from Cliente c where count(c.Pedidos) > 10”;IList<Cliente> cliente = _sessao .CreateQuery(strQuery).List<Cliente>();

Selecionar todos as entidades “Cliente” que tenham comprado mais de 10 vezes:

Sendo produtivo com NHibernateTrabalhe com Objetos

Cliente cliente = new Cliente();cliente.Nome = “Juliano Oliveira”;cliente.Endereço = “São Paulo”;

_sessao.Save(cliente);

Sendo produtivo com NHibernateTrabalhe com Objetos

Cliente cliente = _sessao.Get<Cliente>(222);

cliente.Nome = “Juliano P. Oliveira”;cliente.Endereço = “Barra Funda”;

_sessao.Update(cliente);

Sendo produtivo com NHibernateTrabalhe com Objetosusing(var tx = _sessao.BeginTransaction()) {

Cliente cliente = _sessao.Get<Cliente>(2222); ItemDoPedido itemDoPedido = ItemDoPedidoFactory .Quantidade(2) .Produto(864) .Criar();

Pedido pedido = new Pedido(cliente); pedido.AdicionaItemAoPedido(itemDoPedido);

_sessao.Update(pedido); tx.Commit();}

Sendo produtivo com NHibernateGerencie sua conexão automaticamente

protected void Application_BeginRequest(){ ManagedWebSessionContext.Bind( HttpContext.Current, SessionManager.SessionFactory.OpenSession());}

Sendo produtivo com NHibernateGerencie sua conexão automaticamente

protected void Application_EndRequest() { ISession session = ManagedWebSessionContext.Unbind( HttpContext.Current, SessionManager.SessionFactory);

if (session != null) { if (session.Transaction != null && session.Transaction.IsActive) session.Transaction.Rollback(); else { session.Flush(); session.Close(); } }}

Exemplos práticos: A Hora do Show

Ferramenta NHProf

Referências

Site Oficial do NHibernatehttp://www.nhforge.org/

Blog Ayende Rahienhttp://ayende.com/blog

NHProf – The NHibernate Profilerhttp://www.nhprof.com

Projeto de Tradução da Documentação do NHibernatehttp://nhibernate.programandoem.net

Dúvidas ?!

Juliano Oliveirajul.oliveira@gmail.com

http://programandoem.nettwitter: @juloliveira

Obrigado!Não esqueçam de entrar no grupo .Net Architects

no Google Gruposhttp://groups.google.com/group/dotnetarchitects

top related