NHibernate
Mi fa veramente piacere, dire che da qualche giorno Fabio Maulo, ha cominciato a partecipare in maniera prorompente sul nostro forum nella sezione di ORM di Ugidotnet.
Chi è Fabio? Come chi è? :-)
Uno dei committers di NHibernate! che tra l'altro si è scoperto essere italiano di origine, e vive in Argentina.
Il fatto che partecipi al nostro forum ci farà onore, la sua esperienza e conoscenza è di grande spessore e si è fatto subito sentire a colpi di post.
Mi ha chiesto di dare visibilità al google-group che ha da poco creato (sempre con Focus Nhibernate) e lo faccio con piacere:
Ecco...
Mi è stato chiesto molte volte, anche su Guisa esiste un bel thread sul confronto di questi tre ORM, quindi ne ho approfittato per fare una matrice che incrocia le feature di questi tre prodotti. Ahime non ho ancora qualche informazione su Entity Framework e consideranto che quest'ultimo è ancora in CTP,la sua colonna potrebbe essere passibile di modifiche.
Ho usato il simbolo "??" nelle feature di cui non ho ancora conoscenza.
Siete invitati a propormi qualche eventuale feature su sui trovare i confronti, terrò aggiornata la tabella.
...
Mi sa che c'è solo "un" posto libero!! Ho apportato alcuni ritocchi al materiale, e aggiunto qualcosa (scenari enterprise, linq, e robe vari). Mancano una decina di giorni al 7 Maggio, e questo è un periodo intensissimo di lavoro...il tempo sembra non bastare mai. Se c'è qualcuno interessato si faccia sotto qui!
Lo dicevo qualcosa come due mesi fa al webcast che abbiamo fatto assieme io e Lorenzo,
la famosa Sessione di Domande e Risposte (in cui tra l'altro ci siamo divertiti un casino...), che per come stavano andando le cose avevo intravisto una possibile sinergia tra Linq e NHibernate ed ecco la slide di allora:
Mi sarebbe piaciuto scriverci su qualcosa...ma in fondo in fondo...sapevo che "uno a caso" ci sarebbe arrivato prima...e quindi Linq for NHibernate comincia a prendere forma...
Avere Linq nel linguaggio e una trasformazione delle expression in clausole HQL o Criteria (poco importa) potrebbe voler dire il declino di...
Purtroppo solo in casa Java...ma chissà che non si pensi ad un porting appena possibile. Hibernate Shards è un framework (costruito su Hibernate) che permette di lavorare con le partizioni orizzontali dei database, il tutto con le interfacce abituali SessionFactory, Session, Criteria e Query. Permette di sfruttare la distribuzione dei dati in qualsiasi configurazione di shards. C'è anche il supporto per shards virtuali (in modo che le shard fisiche possano essere rifattorizzate in qualsiasi modo). Tutta la logica è ovviamente a plugin come nella buona tradizione Hibernate, con HQL e Transazioni distribuite. Ecco l'attuale stack di tecnologie Hibernate...
Quando ho letto che i miei blogger preferiti (Jeremy Miller, Scott Bellware, Jeffrey Palermo...e altri "ragazzacci" di CodeBetter) avevano organizzato una "spedizione punitiva" e si sono presi a parte tutto il team di Linq for Entities per spiegare loro un po come va il mondo (giusto qualche lezioncina di NHibernate...quoto: "...teaching them about NHibernate...") mi è venuto troppo da ridere! Una delle cose che da più fastidio della versione attuale di EF è che non rispetta neanche quel minimo principio della persistence ignorance. Classi base da cui ereditare, classi specifiche per le associazioni e interfacce specifiche per il tracciamento dei cambiamenti.Sam Gentile dice che questo è...
Che piacere! Per il primo Mastering NHibernate in italia (data del 15/16 Marzo) è tutto esaurito!Ma credo che ci sia la possibilità di un'altra data, visto che ci sono un bel po di persone che stanno dando l'adesione in queste ore... Il Materiale è pronto...ci sarà da divertirsi.Vi terrò informati su eventuali news in merito alla prossima data. Seguirà per la sera del 15 anche la prima "NHibernate Geek Dinner" a cui ovviamente possono partecipare tranquillamente anche i nn partecipanti al corso...Se ci fosse qualcuno interessato...lasci un commento qui...
Parliamo prima di cose serie. Si va a Bari dagli amici di DotNetSide per andare a mangiare il polipo.Detto questo...nel resto della giornata, per quello che ne rimarrà... si pensava di fare un bel workshop! E infatti ecco qui l'agenda...Ma mica vado da solo....viene pure il mio compagno di merende...Lorenzo, cintura nera di Team System a farci vedere la suite per Database Professional. (Solo questo basterebbe a vedere gente in pellegrinaggio per Bari)L'agenda è veramente di lusso...accesso ai dati a tutti i livelli.Si prevedono i "botti" nella sessioni di Michele, Tiziana, Fabio, Vito... Nella mia sessione stavolta proporrò qualcosa di veramente nuovo e lo...
Primo webcast della giornata finito...Sta per iniziare il secondo...NHibernate: un caso reale...di un altra serie però...(piattaforma applicativa)(Si...ho montato la tenda di fronte alla Microsoft...)ps: sposto le riflessioni a fine giornata...a dopo!
Ci sono già una cinquantina di persone...A dopo...
Domani alle 14.30, altro webcast della serie: La piattaforma .NET nel mondo Enterprise: migrazione, interoperabilità e strumenti Faremo una overview su strumenti come NHibernate, il core dell'inversione di controllo di Spring.NET, una tappa veloce sull'Aspet Oriented Programming sempre con Spring.NET, il framework di MVC di MonoRail e molto altro...sia dal punto di vista architetturale per il disegno di applicazioni enterprise, che con qualche esempio di codice.Il Menu non è niente male...sa di scorpacciata di tecnologia.Vi aspetto.
Pare che abbia registrato una sessione su DNRTV e che la vedremo tra circa un mese.Non vedo l'ora!PS: Un giorno forse si scoprirà che Ayende è in realta l'acronimo dei nome di 6 persone che lavorano tutte assieme allo stesso blog. Come cavolo fa a essere così attivo...è inspiegabile!
Tra download di codice e binario...abbiamo superato i 500 download...ed è solo la prima release...con una qualità Alpha. Non male, sono contento.Tutto questo successo sarà per via del codename? ha portato fortuna alla fine...no?Stiamo lavorando alla seconda release...sempre che il De Sanctis la smetta di pensare a mangiare per queste feste...
Il tutto sempre qui...
In verità i ragazzi di dotnetmarche avevano pensato di far venire Gavin King e Sergey Kosheyev in persona a parlarne, ma poi ci hanno ripensato e quindi adesso a tenere una doppia sessione su NHibernate ci siamo io e il De Sanctis....si vede che i ragazzi la sanno lunga. Ecco l'evento: 2° Workshop "Sviluppare applicazioni 'migliori': CruiseControl.NET & NHibernate" Venerdì 15 Dicembre 2006 Sede AEA - Summa del Gruppo LoccioniVia Fiume, 16 - 60030 Angeli di Rosora (AN) In questo secondo appuntamento parleremo di due tool opensource: vedremo CruiseControl.NET, utilizzato per gestire la Continuous Integration, in azione sulla piattaforma di...
...e da tutto il mondo...con 1500 pageview circa in un solo giorno...
Questi sono i risultati dopo appena 24 ore dalla pubblicazione della prima release, e dopo l'annuncio nel forum di NHibernate e nella mailing list degli sviluppatori sempre di NH.
Vuol dire che l'interesse c'è. Siamo solo ad una 0.1.0 che è da considerare una Early Access...ma va benissimo così...
Per la prossima iterazione (0.2.x) conto di terminare tutti gli elementi NH mancanti e stabilizzare la console, mentre per la terza (0.3.x) inserirò probabilmente il wizard vero e proprio...che sarà il vero fiore all'occhiello: tu gli dai un domain model, gli dai un...
Ok...passata la fatica del workshop, ci siamo messi di buona lena io e il marcuccio per pacchettizzare la prima release del progetto.Ricordo ai più distratti,che adesso il progetto è hostato su codeplex...ecco l'indirizzo.Siamo qundi alla release 0.1.0 che ha una qualità Pre-Alpha,se qualcuno volesse lasciarci qualche feedback (Igor ha già dato qualche ottimo consiglio) può farlo sul forum.Siamo già al lavoro per la 0.2.... Possibili effetti collaterali nell'uso del tool: "Visione di prati verdi".
Ieri è ufficialmente nato un
nuovo progetto opensource.NHibernate Domain
Mapper.E' un lavoro che avevo in testa da un po di tempo, e nelle
ultime settimane ho cercato di dargli una forma.Non è il solito tool che
parte da db e genera le classi...ne avevo abbastanza di tutte le variazioni del
tema.
Allo stato attuale manca qualcosa che ci
faccia fare il percorso più corretto dal punto di vista dell'object
orientation, un più classico TopDown approach. Inoltre, a poco mi serve
creare una struttura dati a partire dall'object model.Il più delle volte
accade invece che l'object model e il database vengono studiati da ruoli
diversi, magari...
Chi frequenta la metropolitana di milano sa che di solito le direzioni della linea "rossa" portano il nome diBisceglie, Molino Dorino, Rho Fiera...e altro.Ieri l'unica scritta che compariva era: MORDOR...solo chi ci è salito può capire...sarà per i 600 gradi di temperatura interna...Cmq, fatto sta che sempre per il caldo, ho dormito poco anche stanotte e ho trovato un'oretta di tempo per fare il logo della sessione su NHibernate per il workshop Persistence & Framework di xe.netCliccate per l'immagine ingrandita...Ho fregato un po di sfondi qui e la (tutti senza copyright ovvio...)Non è carino?
A presto anche un dettaglio sugli argomenti...
Rispondo qui ancora ad un altra domanda anch'essa piuttosto frequente:"...Perchè non posso usare nei miei oggetti di dominio delle collezioni come BindingList, che implementano già IList?" Bisogna ragionare al contrario. Non a caso sotto sotto c'è proprio una inversione di controllo:NHibernate non ha bisogno di un oggetto concreto che implementi un'interfaccia IList.Ha bisogno piuttosto di un oggetto astratto (come IList) in modo che la factory crei a runtime un oggetto concreto da iniettare al parent (dipendente dalla configurazione).(Secondo Fowler l'Inversione di controllo dovrebbe essere più propriamente chiamata dependency injection proprio per questa azione di "iniettare dipendenze di oggetti collaborators")
Classico esempio:
public class Parent{ public IList<item> children; public Parent() { children = new List<item>; }}
Se facessi...
Dopo aver letto il post di Igor (su NHibernate) e soprattutto il commento di Alessandro, posto qui i miei pensieri sull'uso delle interfacce e collezioni sul proprio domain model
Mi ricordo che molti mi muovevano la critica che con NHibernate si ha la necessità di usare delle interfacce in luogo di collezioni concrete (generiche o non), vedi
IList o IDictionary.
Io dico...
L'uso di IList<T> in luogo di List<T> dovrebbe
essere messo tra i comandamenti...e non considerato come una costrizione...
...
E' stato un parto...ma adesso ci siamo, si comincia a vedere la luce...Ecco la prima Alpha di NHibernate 1.2.0 con supporto pieno al CLR 2.0. Qui invece l'annuncio sul forum.Ho seguito passo passo la gestazione in questi mesi...devo dire ottima l'implementazione di un ottimizzatore basato su IL per la parte di reflection...E c'è chi sta lavorando ad una Cache distribuita su più nodi...queste sono belle notizie!...Vi tengo aggiornati...
Vale veramente la pena...di sparare tutte la release notes:Build 1.2.0.Alpha1
========================
Important Breaking Changes:
* Entities and collections are lazy by default. Change by setting default-lazy="false"
in <hibernate-mapping>.
...
E' uscito IoProgrammo di maggio, con un mio articolo su NHibernate...così ho fatto contento al mamma che voleva che diventassi uno scrittore da grande...(meno male che non ha specificato di cosa...)
propongo una statua per quest'uomo!ecco le novità dell'ultima release di NQA, il Query Analyzer, l'irrinunciabile tool per chi lavora con NHibernate:
Working against NHibernate 1.0.2 (the latest and greatest).
Supports 2.0 and 1.1
Supports Nullables
qui il download.
Dataset vs Domain Model: dove pende l'ago della bilancia?dipende...come rifletteva giustamente Marco...se una persona ha come strumento il framework .NET e basta,effettivamente tutti gli spunti hanno senso...ma facciamo un giochino, una piccola aggiunta, e invece di fare DomainModel vs Dataset proviamo a fareDomainModel & NHibernate vs Dataset.Riassumiamo e mettiamo in croce gli spunti di riflessione
Punti a favore del dataset espressi da Marco:
Domain Model con NHibernate
il dataset essendo basato su un Table Model è direttamente mappato sulla struttura del db, invece con il Domain Model avremmo bisogno di un Data Mapper che non è così facile da implementare
NHibernate implementa il Data...
Visto che Marco ne parlava qualche post fa, leggo adesso che Ayende ha introdotto nel suo tool di estensione ai generics per NHibernate anche la DictionaryQui il download.
Anno nuovo e subito interessantissime novità per il progetto.Innanzitutto il wiki, il forum, documentazione e quant'altro sono stati completamente incorporati nel portale di JBoss Hibernate, e la cosa è molto piacevole. E' il primo progetto .NET sotto la casa di JBoss.
Da numerose richieste trapelate in alcune mail scambiate dal gruppo dei developer, Sergej ha scritto un post dove espone l'andamento in futuro del progetto. In parallelo verranno tenute le seguenti linee
Sviluppo del branch 1.0.x fino ad una 1.1 (che lo ricordo rimane allineata alla 2.1 di Hibernate, ma che conterrà già alcune ottime novità della versione 3) e tenere quel ramo solo per eventuali...
Più volte mi è stata posta questa domanda che qui riassumo:
NHibernate nell'ambito di una session può caricare oggetti le cui collezioni vengono marcate come lazy. Gli oggetti delle collezioni non verranno caricati se non in seguito al richiamo della prima funzione che ne fa uso (Un count, il richiamo di un item e così via), il tutto mediante l'uso di un trasparente di un proxy.Fin qui tutto bene.I problemi iniziano quando un oggetto caricato (non completamente) in una session viene passato ad un altra session magari perchè appartenente ad una transazione applicativa (transazioni lunghe che hanno uno span su più transazioni di database),...
Eccone ancora un'altro...Alla lista dei database supportati da NHibernate si aggiunge anche SQLite 3, una specie di mini database che però vanta notevoli qualità, come transazioni ACID, nessuna necessità di configurazione o privilegi di amministratore per il funzionamento, dimensioni fino a 2 Terabyte...ma soprattutto...un footprint da 150/250 kb a seconda della configurazione...niente male...aahh...dimenticavo...è gratis. :-)Tra l'altro SQLite è stato utilizzato da Ayende nel suo mitico NQA (NHibernate Query Analizer).A questo punto su NHIbernate ci ritroviamo la lista di db supportati così composta:
Microsot SQL Server 2000 (e Ms SQL Server 7)Microsoft Access (uscito da pochissimo anche questo)FirebirdMySQLPostgreeSQLSQLiteDB2OracleSybaseMi piacerebbe a questo punto vedere un aggiornamento del...
Innanzitutto grazie a quelli che c'erano e a tutti i feedback...e chi se lo aspettava...Se qualcuno pensa che io ieri fossi sotto l'effetto di droghe...no no...mi sa che era il salame piccante della pizza di Willy...mannaggia a lui!E meno male...visto che la notte prima avrò dormito per un ora al massimo...
Ma una cosa su tutte...Lorenzo è un vero mostro, di precisione e di conoscenza e ieri me ne ha dato dimostrazione...complimenti a lui (segue inchino)!PS: ho già tante ideuzze per una nuova puntata...se son rose...
Bellissima e attesissima notizia...Dopo il rilascio della 1.0 di Nhibernate nelle settimane passate, da quello che si legge i due progetti confluiranno nel megacontenitore open source di JBoss Inc, e addirittura il buon Sergey Koshcheyev (uno degli sviluppatori leader di NH) è stato acquisito proprio da JBoss Inc. per lavorare full-time al progetto....il che vuol dire porting di Hibernate3 al più presto possibile (non vedo l'ora), documentazione dedicata al framework e chi più ne ha più ne metta!Se c'è qualcuno che si azzarda a chiamare JBoss come..."lato oscuro"...mi offendo! :-)Altra piccola soddisfazione: Che bello digitare su google la parola NHibernate e non trovare più quella odiosa frase..."Forse stavi...
Ecco la pagina per votare il logo di Nhibernate...A me piace trooooooooppo questo... (anche se sa un po di Firefox...ma quella è una volpe...questo è un dormouse!)(è in testa a tutti!)
Chiedo perdono se non rispondo subito a qualche domanda fatta sui feedback ma in questo momento sono senza computer e senza un aggregator serio...è da urlo seguire i post.
Metto assieme qualche risposta qui.
a) NHibernate problemi con Microsoft Access? (per Andrea Boschin)Effettivamente non esiste un driver apposito e da quello che si evince dal wiki qualche problema sulle join potrebbe esistere....ma di che tipo?Non credo che i problemi sorgano nella mappatura standard ma probabilmente nelle espressioni HQL (Hibernate Query Language) magari con una join in Theta style....e allora si che sarebbe da verificare e quindi Andrea...fa il tuo lavoro tranquillo con...
Immaginate un bella classettina così composta:(I puristi mi perdoneranno per il non uso delle property ma le ho omesse solo per salvare spazio...e perchè non ho il mio portatile e scrivo da web!!)
Public Class Fattura Public Numero as Integer Public Anno as integer Public Data as Datetime Public Cliente as Cliente Public Ordine as Ordine Public Dettagli as DettaglioFatturaCollection
Public Sub New() 'Inizializza un po tutto :-) End Sub End ClassLa classe Fattura aggrega una istanza di tipo Cliente e una di tipo Ordine e ha anche una bella custom collection tipizzata per contenere i suoi dettagli.Qualche altro campo per il numero...
Che tipo di operazioni su DB deve fare un ORM?Un ORM è uno strumento per gestire in modo automatico la persistenza di una classe,intendendo con persistenza le 4 fondamentali operazioni CRUD.Che poi queste operazioni di CRUD interessino un oggetto e tutte le sue eventuali collezioni magari in contesto transazionale poco cambia...sempre CRUD sono.
Quindi se ho bisogno nei miei processi di business di quelle che definisco operazioni di massa(es ricalcolo di una colonna su tutta una tabella o calcoli con grouping, statistiche e robaccia varia), queste NON rientrano tra le operazioni di persistenza.
Quindi uno potrebbe dire...ok il mio ORM fa solo...
Vediamo di stuzzicare la curiosità di quelli interessati a intraprendere le vie dell'ORM (e non). Titolo esteso del post: Perchè NHibernate è meglioNon sto qui a dirvi cosa è un'ORM ma ritengo sia importante almeno dare una classificazione.Ottima quella di Fussell che nel 1997 vedeva già questa separazione
Light Object MappingEntità sono rappresentate da classi e mappate manualmente sulle tabelle relazionalil'accesso ai dati è incapsulato in oggetti DAO e nascosto alle business logic classUso di stored procedureOttimo per applicazioni con basso numero di entità
Medium Object MappingL'applicazione è progettata attorno ad un object modelle istruzioni SQL sono generate in build time da...
NHibernate raggiunge la release 0.9. Visto che molti me lo hanno chiesto sfatiamo un piccolo mito:Essendo un progetto OpenSource, avere un numero di versione inferiore a 1.0 non significa che il software è instabile o ancora immaturo (ricordo che si tratta di porting). In pratica dal wiki stesso si può leggere che l'unica cosa che manca per raggiungere lo stato della versione 1.0 è solo la documentazione, e il gruppo di progetto non essendo spinto da logiche di marketing si può prendere il suo tempo, in tranquillità.La cosa più importante è invece la suite di test che viene rilasciata e che è sotto gli occhi...
Come già anticipato dal buon Lorenzo (che in questo momento è in vacanza chissà dove!), a novembre avrò il piacere di tenere con lui il workshop:Scrivere meno codice usando blocchi già pronti? Si può: NHibernate e Enterprise Library! La parte di Enterprise Library spetta a lui, invece a me tocca intrattenervi su una mia vera e propria passione: NHibernate.Per chi non lo conoscesse, in due parole: NHibernate è il porting del più famoso framework di persistenza del mondo Java (Hibernate), sicuramente il più usato sulla faccia della terra, non a caso ce lo ritroviamo integrato in ambienti quali JBoss.PS: A chi non ha mai visto che cosa...