NHibernate in Action (Parte 2)

19
NHIBERNATE SCENARI AVANZATI... (janky)

description

La persistenza delle entity del domain model è, a dispetto dell'apparente semplicità, un task applicativo che nasconde molteplici problematiche. Perché allora non avvalersi di quello che, attualmente, è il più utilizzato framework di persistenza al mondo? NHibernate consente di sfruttare al meglio le tecnologie di accesso ai dati, di minimizzare la scrittura di codice e di evitare quindi errori inutili. In una frase, aumentare la nostra produttività. Introduzione al Domain Model Domain Model e modello E/R: Paradigm Mismatch Nasce l'esigenza di un ORM: Introduzione al progetto NH Architettura di NHibernate: le factory, la session, e le entity Demo: Configurazione, Il file di mapping, e un esempio con un Oggetto di dominio semplice Demo: Dirty Checking, Optimistic Lock, e Unit of Work (IndentityMap e Transparent Write Behind) Presentazione e demo di NHDomain Mapper Persistenza di un grafo complesso Strategie di retrieving dei dati Esempio di architettura di un'applicazione reale Q & A

Transcript of NHibernate in Action (Parte 2)

Page 1: NHibernate in Action (Parte 2)

NHIBERNATESCENARI AVANZATI...

(janky)

Page 2: NHibernate in Action (Parte 2)

about me...

Giancarlo Sudano (aka janky)

Sono Software architect in Objectway

Sono tra i fondatori di GUISA (www.guisa.org)

Passione per framework OS (NHibernate, Spring.NET, CastleProject)

Blog: http://blogs.ugidotnet.org/janky

Mail: [email protected]

Page 3: NHibernate in Action (Parte 2)

Domain Model: un salto di qualità

Page 4: NHibernate in Action (Parte 2)

Soluzioni?

Page 5: NHibernate in Action (Parte 2)

ORM: Aspetti statici - structural

1.Mapping

2.Persistenza di una Entity

3.Dirty checking

4.Trasparent Write Behind

5.Locking/Concurrency

Page 6: NHibernate in Action (Parte 2)

ORM: Aspetti dinamici - behavioral

1.Persistenza Transitiva

2.Strategie di caricamento dei dati

Page 7: NHibernate in Action (Parte 2)

ORM: Persistenza Transitiva

1.E’ un algoritmo ricorsivo: Tutti le istanze di oggetti “raggiungibili” da un oggetto persistente diventano anch’essi persistenti.

Top Level (root)

Page 8: NHibernate in Action (Parte 2)

ORM: Lifecyle di una entity

Transient Entity

Persistent Entity

Detached Entity

Persistence Context

Database

Page 9: NHibernate in Action (Parte 2)

ORM: Persistenza Transitiva

Soluzione di NHibernate:Persistence by Reachability con Cascade

Istanza IstanzaAssociazion

e

Cascade

Behaviour

Page 10: NHibernate in Action (Parte 2)

ORM: Object Retrieve• Query By

Criteria• Esecuzione di

Query Type Safe e Object Oriented

• Query by example• Query prodotta a

partire da una istanza di oggetto prorotipo

• Hibernate Query Language

• Linguaggio di Intgerrogazione Object Oriented

• Interrogazione mediante SQL puro

• Risultato mappato sulle entity

QbC QbE

HQLSQL native

Page 11: NHibernate in Action (Parte 2)

ORM: Strategie di Fetching

Immediate Fetching

Lazy Fetching

Eager Fetching

Page 12: NHibernate in Action (Parte 2)

ORM: Immediate Fetching

1.Select successive

2.Uso della cache

3.Ottimizzazini Batch

Page 13: NHibernate in Action (Parte 2)

ORM: Lazy Fetching

1.Select scatenate all’occorrenza

2.Uso di classi Proxy

Page 14: NHibernate in Action (Parte 2)

ORM: Eager Fetching

1.Uso di Left Outer Join

2.Profondita delle Join

Page 15: NHibernate in Action (Parte 2)

ORM: Strategie di Fetching

lazy eager

Page 16: NHibernate in Action (Parte 2)

Persistence Context

E E EContext

E EContext

Context Provider

User Interface Layer

Business Layer

Data Access Layer

DAO DAO DAO

Context:

Identity MapUnit of WorkAutomatic Dirty CheckOptimistic ConcurrencyPessimistic ConcurrencyProxy per Lazy...

Page 17: NHibernate in Action (Parte 2)

Scenari Applicativi

database

session(cache 1° level)

cache distribuita(2° level)

session(cache 1° level)

application application

session(cache 1° level)

cache(2° level)

application

session(cache 1° level)

application

Page 18: NHibernate in Action (Parte 2)

NH: Considerazioni finali

“...Hibernate’s job is to reduce the amount of code you have to write for the most common 90 percent of use cases (common CRUD and reporting)...”

“…Hibernate’s learning curve is high at first. In our experience, a developer needs at least two to four weeks to learn the basics. Don’t jump on Hibernate one week before your project deadline. It won’t save you…”

“…Finally, use SQL, JDBC, and stored procedures for the 5 percent of use cases you can’t implement with Hibernate, such as mass data manipulation

or complex reporting queries with vendor-specific SQL functions…”

[Gavin King, Hibernate in Action]

Page 19: NHibernate in Action (Parte 2)

ORM: Considerazioni

Il Domain Model agnostico al layer di persistenza...ma deve essere disegnato per “favorire” la persistenza...

Fornire Identity Field a tutte gli Entity Type

Entity che hanno delle collection devono essere definite come IList<T> (favorisce la Dependency Injection)

Evitare classi sealed per le entity che hanno bisogno di lazy (gli ORM solitamente forniscono dei proxy object)

DB: Favorite l’uso Surrogate Keys in luogo di Natural Keys, evitate Composite Keys, pensate al Versioning