SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
ORM
Nhibernate
Fluent NHibernate
.Net C#
André Rocha Agostinho
Definição de ORM
• Object Relational Mapping framework, which (as ORM states) maps
between relational data and objects
• Technique for converting data between incompatible type
systems in object-oriented programming languages.
O problema
• Linguagens OO - Orientado à Objetos - Tipos não escalares
• Linguagem SQL – Linguagem Estruturada - Tipos escalares
O problema
• Tipo escalar: Armazena um único tipo de valor associado a um
símbolo.
Exemplo:
int peopleId = 1;
string peopleName = “Carlos”;
string phoneNumber = “011 3044-4292”
Mesmo que usado uma array geralmente essa array seria tipada: string[] people = {“Carlos”, “Maria”}
O problema
• Tipo nao escalar: Armazena mais de um tipo de valor associado a
um simbolo.
Exemplo:
People people= new People();
people.id = 1;
people.name = “Carlos”;
people.phones = new List<PhoneNumber>().add(new PhoneNumber(){number=“011-30444292”});
O problema
• String SQL
Linguagem estruturada:
int peopleId = 1;
string peopleName = “Carlos”;
string phoneNumber = “011 3044-4292”
Repository.People.Save(peopleId,peopleName);
Insert Into People(id,name) Values(@peopleId, @peopleName);
Repository.PhoneNumber.Save(peopleId,phoneNumber);
Insert Into PhoneNumber(peopleId,number) Values(@peopleId,
@phoneNumber);
Linguagem OO:
People people= new People();
people.id = 1;
people.name = “Carlos”;
people.phones = new List<PhoneNumber>()
.add(new PhoneNumber (“011-30444292”);
Repository.People.Save(people);
Insert Into People(id,name) Values(@people.Id, @people.name);
Repository.PhoneNumber.Save(people);
Insert Into PhoneNumber(peopleId,number) Values(@people.id,
@people.phones[0]);
A solução
• Persistências dos objetos
Repository.People.Save(people);
Repository.PhoneNumber.Save(people.phoneNumber);
TblPeople
People
TblPhoneNumber
PhoneNumber
ORM
DBMS
OO APP
Insert Into People(id,name) Values(@people.Id, @people.name);
Insert Into PhoneNumber(peopleId,number) Values(@people.id,
@people.phones[0]);
HQL
SQL
insert into PhoneNumber (peopleId, number) select p.id,
@people.phoneNumber[0] from Pessoa p where p.id =
@people.id
Hibernate, Nhibernate e Fluent NHibernate
• Hibernate ORM enables developers to more easily write applications whose data outlives the application
process. As an Object/Relational Mapping (ORM) framework, Hibernate is concerned with data persistence
as it applies to relational databases (via JDBC).
• NHibernate is a mature, open source object-relational mapper for the .NET framework. It's actively
developed, fully featured and used in thousands of successful projects.
• Fluent NHibernate offers an alternative to NHibernate's standard XML mapping files. Rather than writing
XML documents (.hbm.xml files), Fluent NHibernate lets you write mappings in strongly typed C# code. This
allows for easy refactoring, improved readability and more concise code.
Nhibernate X Fluent NHibernate
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace=“AddressBook" assembly=" AddressBook">
<class name=“People" table=“People">
<id name="Id">
<generator class="identity" />
</id>
<property name="Name">
<column name="Name" length="16" not-null="true" />
</property>
<bag name=“PhoneNumberList">
<key column=“peopleId" />
<one-to-many class=“PhoneNumber" />
</bag>
</class>
</hibernate-mapping>
public class PeopleMap : ClassMap<People>
{
public PeopleMap()
{
Id(x => x.Id);
Map(x => x.Name)
.Length(16)
.Not.Nullable();
HasMany(x => x.PhoneNumber);
}
}
Baby Steps in C#
Criação de um projeto simples
- Utilize os padrões de projeto que melhor atenda a sua necessidade]
- Uma console application pode facilitar o seu estudo
Console App
Source from:
https://github.com/aragostinho/FluentGenericDao
Baby Steps in C#
Instale o projeto usando o Nuget
• PM> Install-Package FluentNHibernate
Baby Steps com C#
Crie e mapeie suas entidades
• Crie uma camada para que possa armazenar suas entidades e mapeamentos
• Comece com ao menos uma entidade simples. Isso irá facilitar para que possa testar toda a configuração
Entidade “Task” Mapeamento “TaskMasp”
Camada Domain
Baby Steps in C#
Implemente a classe SessionFactory do NHibernate
• Crie uma camada para que possa armazenar classes relevantes ao seu repositório de dados
• Existem N formas de implementar a SessionFactory, cada implementação especifica para cada tipo de bando de dados.
Camada Repository
Exemplo de classe estática “FluentHibernateHelper”
Baby Steps in C#
Implemente a classe SessionFactory com MySql
• No exemplo usamos o banco de dados MySql. Instale o MySql Data
PM> Install-Package MySql.Data
Camada Repository
Baby Steps in C#
Implemente uma camada Business (recomendado)
• Como boa prática é recomendado que se crie uma camada para armazenar suas classes negócios
as quais farão comunicação entre o seu repositório e as entidades do seu domínio.
• Utilize os padrões de projeto que melhor se adequam ao seu projeto: Factory, Singleton, Generics....
• O Fluent já fornece métodos CRUD, mas como boa prática é recomendado que você cria uma interface DAO e uma
classe abstrata para que possa “enriquecer” suas classes de negócios através de herança e reescrita de métodos.
Camada Business
Exemplo de classe abstrata “AbstractGenericDao<T>”
Baby Steps in C#
Utilizando classes de negócios na sua aplicação
• Como resultado final a utilização de sua classes de negócios na sua aplicação deve proporcionar facilidade
para codificação e chamada dos métodos CRUD e ser 100% independente das informações de seu repositório.
Console App
Referências
• http://www.fluentnhibernate.org/
• http://hibernate.org/
• http://nhibernate.info/
• http://www.fluentnhibernate.org/
• https://github.com/aragostinho/FluentGenericDao

Mais conteúdo relacionado

Destaque

Identificando requisitos comuns e variantes em linhas de produtos de software
Identificando requisitos comuns e variantes em linhas de produtos de softwareIdentificando requisitos comuns e variantes em linhas de produtos de software
Identificando requisitos comuns e variantes em linhas de produtos de softwareAndré Agostinho
 
Software Optimization and Tuning Techniques for z13 (As mentiras do ontem, um...
Software Optimization and Tuning Techniques for z13 (As mentiras do ontem, um...Software Optimization and Tuning Techniques for z13 (As mentiras do ontem, um...
Software Optimization and Tuning Techniques for z13 (As mentiras do ontem, um...Joao Galdino Mello de Souza
 
Estudo comparativo entre treinamento supervisionado e não supervisionado em a...
Estudo comparativo entre treinamento supervisionado e não supervisionado em a...Estudo comparativo entre treinamento supervisionado e não supervisionado em a...
Estudo comparativo entre treinamento supervisionado e não supervisionado em a...Joao Galdino Mello de Souza
 
Modelagem Analítica – Queueing Theory (Part I)
Modelagem Analítica – Queueing Theory (Part I)Modelagem Analítica – Queueing Theory (Part I)
Modelagem Analítica – Queueing Theory (Part I)Joao Galdino Mello de Souza
 
Introdução à Lógica de Programação
Introdução à Lógica de ProgramaçãoIntrodução à Lógica de Programação
Introdução à Lógica de ProgramaçãoAndré Agostinho
 
Internet das Coisas (IoT) – Um estudo de caso para economia de energia elétri...
Internet das Coisas (IoT) – Um estudo de caso para economia de energia elétri...Internet das Coisas (IoT) – Um estudo de caso para economia de energia elétri...
Internet das Coisas (IoT) – Um estudo de caso para economia de energia elétri...Joao Galdino Mello de Souza
 
Scrum - Desenvolvimento Ágil
Scrum - Desenvolvimento ÁgilScrum - Desenvolvimento Ágil
Scrum - Desenvolvimento ÁgilIsrael Santiago
 
Desenvolvimento de um aplicativo móvel utilizando o Ciclo de Engenharia de Us...
Desenvolvimento de um aplicativo móvel utilizando o Ciclo de Engenharia de Us...Desenvolvimento de um aplicativo móvel utilizando o Ciclo de Engenharia de Us...
Desenvolvimento de um aplicativo móvel utilizando o Ciclo de Engenharia de Us...André Agostinho
 

Destaque (10)

Scrum fundamentos basicos
Scrum   fundamentos basicosScrum   fundamentos basicos
Scrum fundamentos basicos
 
Identificando requisitos comuns e variantes em linhas de produtos de software
Identificando requisitos comuns e variantes em linhas de produtos de softwareIdentificando requisitos comuns e variantes em linhas de produtos de software
Identificando requisitos comuns e variantes em linhas de produtos de software
 
Software Optimization and Tuning Techniques for z13 (As mentiras do ontem, um...
Software Optimization and Tuning Techniques for z13 (As mentiras do ontem, um...Software Optimization and Tuning Techniques for z13 (As mentiras do ontem, um...
Software Optimization and Tuning Techniques for z13 (As mentiras do ontem, um...
 
Quantas Instruções por Ciclo?
Quantas Instruções por Ciclo?Quantas Instruções por Ciclo?
Quantas Instruções por Ciclo?
 
Estudo comparativo entre treinamento supervisionado e não supervisionado em a...
Estudo comparativo entre treinamento supervisionado e não supervisionado em a...Estudo comparativo entre treinamento supervisionado e não supervisionado em a...
Estudo comparativo entre treinamento supervisionado e não supervisionado em a...
 
Modelagem Analítica – Queueing Theory (Part I)
Modelagem Analítica – Queueing Theory (Part I)Modelagem Analítica – Queueing Theory (Part I)
Modelagem Analítica – Queueing Theory (Part I)
 
Introdução à Lógica de Programação
Introdução à Lógica de ProgramaçãoIntrodução à Lógica de Programação
Introdução à Lógica de Programação
 
Internet das Coisas (IoT) – Um estudo de caso para economia de energia elétri...
Internet das Coisas (IoT) – Um estudo de caso para economia de energia elétri...Internet das Coisas (IoT) – Um estudo de caso para economia de energia elétri...
Internet das Coisas (IoT) – Um estudo de caso para economia de energia elétri...
 
Scrum - Desenvolvimento Ágil
Scrum - Desenvolvimento ÁgilScrum - Desenvolvimento Ágil
Scrum - Desenvolvimento Ágil
 
Desenvolvimento de um aplicativo móvel utilizando o Ciclo de Engenharia de Us...
Desenvolvimento de um aplicativo móvel utilizando o Ciclo de Engenharia de Us...Desenvolvimento de um aplicativo móvel utilizando o Ciclo de Engenharia de Us...
Desenvolvimento de um aplicativo móvel utilizando o Ciclo de Engenharia de Us...
 

Semelhante a ORM NHibernate Fluent C# introdução

Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensAlessandro Binhara
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
Mapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORMMapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORMFábio Rehm
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webRafael Nunes
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearchtdc-globalcode
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Tchelinux
 
Tecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveisTecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveisLuiz Bettega
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)Thiago de Azeredo
 
Aula8.pptx
Aula8.pptxAula8.pptx
Aula8.pptxacsme
 
SQL Server Heterogêneo: SQL Server + BigData
SQL Server Heterogêneo: SQL Server + BigDataSQL Server Heterogêneo: SQL Server + BigData
SQL Server Heterogêneo: SQL Server + BigDataRodrigo Dornel
 

Semelhante a ORM NHibernate Fluent C# introdução (20)

Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvens
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Mapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORMMapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORM
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações web
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
 
Tecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveisTecnologias para sistemas distribuidos escalaveis
Tecnologias para sistemas distribuidos escalaveis
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)
 
Aula8.pptx
Aula8.pptxAula8.pptx
Aula8.pptx
 
SQL Server Heterogêneo: SQL Server + BigData
SQL Server Heterogêneo: SQL Server + BigDataSQL Server Heterogêneo: SQL Server + BigData
SQL Server Heterogêneo: SQL Server + BigData
 
Bancos de dados NoSQL (Not only sql)
Bancos de dados NoSQL (Not only sql)Bancos de dados NoSQL (Not only sql)
Bancos de dados NoSQL (Not only sql)
 
Material Seminário NoSQL
Material Seminário NoSQLMaterial Seminário NoSQL
Material Seminário NoSQL
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 

Mais de André Agostinho

How to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringHow to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringAndré Agostinho
 
Google web stories #SnetTalks3
Google web stories #SnetTalks3Google web stories #SnetTalks3
Google web stories #SnetTalks3André Agostinho
 
Impact mapping #SnetTalks3
Impact mapping  #SnetTalks3Impact mapping  #SnetTalks3
Impact mapping #SnetTalks3André Agostinho
 
Asp.net Core 5 and C# 9 - #SnetTalks2
Asp.net Core 5 and C# 9 - #SnetTalks2Asp.net Core 5 and C# 9 - #SnetTalks2
Asp.net Core 5 and C# 9 - #SnetTalks2André Agostinho
 
ARIA - Acessible Rich Internet Applications #SnetTalks2
ARIA - Acessible Rich Internet Applications #SnetTalks2ARIA - Acessible Rich Internet Applications #SnetTalks2
ARIA - Acessible Rich Internet Applications #SnetTalks2André Agostinho
 
AMP - Accelarared Mobile Pages #SnetTalks2
AMP - Accelarared Mobile Pages #SnetTalks2AMP - Accelarared Mobile Pages #SnetTalks2
AMP - Accelarared Mobile Pages #SnetTalks2André Agostinho
 
Lead time and cycle time. What matters? #SnetTalks1
Lead time and cycle time.  What matters? #SnetTalks1Lead time and cycle time.  What matters? #SnetTalks1
Lead time and cycle time. What matters? #SnetTalks1André Agostinho
 
Overcoming automation fear in infrastructure as code
Overcoming automation fear in infrastructure as codeOvercoming automation fear in infrastructure as code
Overcoming automation fear in infrastructure as codeAndré Agostinho
 
Scaling multi cloud with infrastructure as code
Scaling multi cloud with infrastructure as codeScaling multi cloud with infrastructure as code
Scaling multi cloud with infrastructure as codeAndré Agostinho
 
Cloud continuous integration- A distributed approach using distinct services
Cloud continuous integration- A distributed approach using distinct servicesCloud continuous integration- A distributed approach using distinct services
Cloud continuous integration- A distributed approach using distinct servicesAndré Agostinho
 
Goal-Driven Software Process
Goal-Driven Software ProcessGoal-Driven Software Process
Goal-Driven Software ProcessAndré Agostinho
 
9 Mistakes You're Making on LinkedIn
9 Mistakes You're Making on LinkedIn9 Mistakes You're Making on LinkedIn
9 Mistakes You're Making on LinkedInAndré Agostinho
 
What Technologies Will Crowdfunding Create?
What Technologies Will Crowdfunding Create?What Technologies Will Crowdfunding Create?
What Technologies Will Crowdfunding Create?André Agostinho
 
Novos dispositivos Kindle
Novos dispositivos Kindle Novos dispositivos Kindle
Novos dispositivos Kindle André Agostinho
 

Mais de André Agostinho (17)

How to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringHow to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software Engineering
 
Blazor #SnetTalks3
Blazor  #SnetTalks3Blazor  #SnetTalks3
Blazor #SnetTalks3
 
Google web stories #SnetTalks3
Google web stories #SnetTalks3Google web stories #SnetTalks3
Google web stories #SnetTalks3
 
Impact mapping #SnetTalks3
Impact mapping  #SnetTalks3Impact mapping  #SnetTalks3
Impact mapping #SnetTalks3
 
Asp.net Core 5 and C# 9 - #SnetTalks2
Asp.net Core 5 and C# 9 - #SnetTalks2Asp.net Core 5 and C# 9 - #SnetTalks2
Asp.net Core 5 and C# 9 - #SnetTalks2
 
ARIA - Acessible Rich Internet Applications #SnetTalks2
ARIA - Acessible Rich Internet Applications #SnetTalks2ARIA - Acessible Rich Internet Applications #SnetTalks2
ARIA - Acessible Rich Internet Applications #SnetTalks2
 
AMP - Accelarared Mobile Pages #SnetTalks2
AMP - Accelarared Mobile Pages #SnetTalks2AMP - Accelarared Mobile Pages #SnetTalks2
AMP - Accelarared Mobile Pages #SnetTalks2
 
Lead time and cycle time. What matters? #SnetTalks1
Lead time and cycle time.  What matters? #SnetTalks1Lead time and cycle time.  What matters? #SnetTalks1
Lead time and cycle time. What matters? #SnetTalks1
 
Overcoming automation fear in infrastructure as code
Overcoming automation fear in infrastructure as codeOvercoming automation fear in infrastructure as code
Overcoming automation fear in infrastructure as code
 
Scaling multi cloud with infrastructure as code
Scaling multi cloud with infrastructure as codeScaling multi cloud with infrastructure as code
Scaling multi cloud with infrastructure as code
 
Cloud continuous integration- A distributed approach using distinct services
Cloud continuous integration- A distributed approach using distinct servicesCloud continuous integration- A distributed approach using distinct services
Cloud continuous integration- A distributed approach using distinct services
 
Goal-Driven Software Process
Goal-Driven Software ProcessGoal-Driven Software Process
Goal-Driven Software Process
 
Second Screen
Second Screen Second Screen
Second Screen
 
9 Mistakes You're Making on LinkedIn
9 Mistakes You're Making on LinkedIn9 Mistakes You're Making on LinkedIn
9 Mistakes You're Making on LinkedIn
 
Mobile malware
Mobile malwareMobile malware
Mobile malware
 
What Technologies Will Crowdfunding Create?
What Technologies Will Crowdfunding Create?What Technologies Will Crowdfunding Create?
What Technologies Will Crowdfunding Create?
 
Novos dispositivos Kindle
Novos dispositivos Kindle Novos dispositivos Kindle
Novos dispositivos Kindle
 

ORM NHibernate Fluent C# introdução

  • 2. Definição de ORM • Object Relational Mapping framework, which (as ORM states) maps between relational data and objects • Technique for converting data between incompatible type systems in object-oriented programming languages.
  • 3. O problema • Linguagens OO - Orientado à Objetos - Tipos não escalares • Linguagem SQL – Linguagem Estruturada - Tipos escalares
  • 4. O problema • Tipo escalar: Armazena um único tipo de valor associado a um símbolo. Exemplo: int peopleId = 1; string peopleName = “Carlos”; string phoneNumber = “011 3044-4292” Mesmo que usado uma array geralmente essa array seria tipada: string[] people = {“Carlos”, “Maria”}
  • 5. O problema • Tipo nao escalar: Armazena mais de um tipo de valor associado a um simbolo. Exemplo: People people= new People(); people.id = 1; people.name = “Carlos”; people.phones = new List<PhoneNumber>().add(new PhoneNumber(){number=“011-30444292”});
  • 6. O problema • String SQL Linguagem estruturada: int peopleId = 1; string peopleName = “Carlos”; string phoneNumber = “011 3044-4292” Repository.People.Save(peopleId,peopleName); Insert Into People(id,name) Values(@peopleId, @peopleName); Repository.PhoneNumber.Save(peopleId,phoneNumber); Insert Into PhoneNumber(peopleId,number) Values(@peopleId, @phoneNumber); Linguagem OO: People people= new People(); people.id = 1; people.name = “Carlos”; people.phones = new List<PhoneNumber>() .add(new PhoneNumber (“011-30444292”); Repository.People.Save(people); Insert Into People(id,name) Values(@people.Id, @people.name); Repository.PhoneNumber.Save(people); Insert Into PhoneNumber(peopleId,number) Values(@people.id, @people.phones[0]);
  • 7. A solução • Persistências dos objetos Repository.People.Save(people); Repository.PhoneNumber.Save(people.phoneNumber); TblPeople People TblPhoneNumber PhoneNumber ORM DBMS OO APP Insert Into People(id,name) Values(@people.Id, @people.name); Insert Into PhoneNumber(peopleId,number) Values(@people.id, @people.phones[0]); HQL SQL insert into PhoneNumber (peopleId, number) select p.id, @people.phoneNumber[0] from Pessoa p where p.id = @people.id
  • 8. Hibernate, Nhibernate e Fluent NHibernate • Hibernate ORM enables developers to more easily write applications whose data outlives the application process. As an Object/Relational Mapping (ORM) framework, Hibernate is concerned with data persistence as it applies to relational databases (via JDBC). • NHibernate is a mature, open source object-relational mapper for the .NET framework. It's actively developed, fully featured and used in thousands of successful projects. • Fluent NHibernate offers an alternative to NHibernate's standard XML mapping files. Rather than writing XML documents (.hbm.xml files), Fluent NHibernate lets you write mappings in strongly typed C# code. This allows for easy refactoring, improved readability and more concise code.
  • 9. Nhibernate X Fluent NHibernate <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace=“AddressBook" assembly=" AddressBook"> <class name=“People" table=“People"> <id name="Id"> <generator class="identity" /> </id> <property name="Name"> <column name="Name" length="16" not-null="true" /> </property> <bag name=“PhoneNumberList"> <key column=“peopleId" /> <one-to-many class=“PhoneNumber" /> </bag> </class> </hibernate-mapping> public class PeopleMap : ClassMap<People> { public PeopleMap() { Id(x => x.Id); Map(x => x.Name) .Length(16) .Not.Nullable(); HasMany(x => x.PhoneNumber); } }
  • 10. Baby Steps in C# Criação de um projeto simples - Utilize os padrões de projeto que melhor atenda a sua necessidade] - Uma console application pode facilitar o seu estudo Console App Source from: https://github.com/aragostinho/FluentGenericDao
  • 11. Baby Steps in C# Instale o projeto usando o Nuget • PM> Install-Package FluentNHibernate
  • 12. Baby Steps com C# Crie e mapeie suas entidades • Crie uma camada para que possa armazenar suas entidades e mapeamentos • Comece com ao menos uma entidade simples. Isso irá facilitar para que possa testar toda a configuração Entidade “Task” Mapeamento “TaskMasp” Camada Domain
  • 13. Baby Steps in C# Implemente a classe SessionFactory do NHibernate • Crie uma camada para que possa armazenar classes relevantes ao seu repositório de dados • Existem N formas de implementar a SessionFactory, cada implementação especifica para cada tipo de bando de dados. Camada Repository Exemplo de classe estática “FluentHibernateHelper”
  • 14. Baby Steps in C# Implemente a classe SessionFactory com MySql • No exemplo usamos o banco de dados MySql. Instale o MySql Data PM> Install-Package MySql.Data Camada Repository
  • 15. Baby Steps in C# Implemente uma camada Business (recomendado) • Como boa prática é recomendado que se crie uma camada para armazenar suas classes negócios as quais farão comunicação entre o seu repositório e as entidades do seu domínio. • Utilize os padrões de projeto que melhor se adequam ao seu projeto: Factory, Singleton, Generics.... • O Fluent já fornece métodos CRUD, mas como boa prática é recomendado que você cria uma interface DAO e uma classe abstrata para que possa “enriquecer” suas classes de negócios através de herança e reescrita de métodos. Camada Business Exemplo de classe abstrata “AbstractGenericDao<T>”
  • 16. Baby Steps in C# Utilizando classes de negócios na sua aplicação • Como resultado final a utilização de sua classes de negócios na sua aplicação deve proporcionar facilidade para codificação e chamada dos métodos CRUD e ser 100% independente das informações de seu repositório. Console App
  • 17. Referências • http://www.fluentnhibernate.org/ • http://hibernate.org/ • http://nhibernate.info/ • http://www.fluentnhibernate.org/ • https://github.com/aragostinho/FluentGenericDao