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
7. 1.E’ un algoritmo ricorsivo: Tutti le istanze di
oggetti “raggiungibili” da un oggetto
persistente diventano anch’essi persistenti.
Top Level
(root)
9. Soluzione di NHibernate:
Persistence by Reachability con Cascade
Istanza Istanza
Associazione
Cascade
Behaviour
10. • Hibernate Query
Language
• Linguaggio di
Intgerrogazione
Object Oriented
• Interrogazione
mediante SQL puro
• Risultato mappato
sulle entity
• Query by example
• Query prodotta a
partire da una
istanza di oggetto
prorotipo
• Query By Criteria
• Esecuzione di
Query Type Safe e
Object Oriented
QbC QbE
HQL
SQL
native
16. User Interface Layer
Context E E E
Business Layer
Context E E
Data Access Layer
Context Provider
DAO DAO DAO
Context:
Identity Map
Unit of Work
Automatic Dirty Check
Optimistic Concurrency
Pessimistic Concurrency
Proxy per Lazy...
18. “...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]
19. 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