Nhibernate e dintorni 3

Ecco l'elenco di tutti i progetti, applicazioni, siti web etc.. divisi per argomento, che hanno una relazione diretta e non con l'universo di Nhibernate:

Le differenze tra il precedente post e il nuovo sono segnate da  (new!). Mentre le sezioni che hanno un aggiornamento rilevante sono in (updated!)

Precedenti versioni le trovate qui(2009), qui(17-05-2010),

Ultimo aggiornamento: 01-07-2010 - precedente aggiornamento 17-05-2010

Progetti strettamente correlati:

  • Contrib - è una serie di librerie che fanno da "contributo" ufficiale a Nhibernate (comprende: burrow, caches, validator, mapping attributes, linq, shards) - non seguono lo stesso percorso di sviluppo di nhibernate (es: a settembre abbiamo ancora il validator 1.0ga per nhibernate 2.0.1 mentre è già disponibile da mesi nhibernate 2.1. Nota: Validator 2.1 è già presente in giro...si attende la pubblicazione ufficiale..).
    E' accessibile attraverso via SVN a questo indirizzo.
  • Burrow - framework pensato per essere veloce e leggero da usare in ambito ASP.NET per facilitare l'interfacciamento e la gestione delle sessioni di Nhibernate.
                Tra le varie cose permette: una facilitazione della gestione delle sessioni e delle transazioni.
                Implementa in maniera del tutto trasparente il pattern OpenSessionInView con il quale viene aperta una sessione/transazione per request (Best practice!).
                Quello che è interessante è la possibilità di "spalmare" la sessione su più richieste http attraverso il Burrow Conversation.
  • Caches - una serie di provider da utilizzare con Nhibernate per il sistema di caching di secondo livello.
                 Questo tipo di cache è molto potente ma è da utilizzare con la dovuta cautela in quanto esce dalla singola sessione e rischia di creare delle discrepanze evidenti tra lo stato transiente e persistente.
                 Per capirne qualcosa di più: il blog di Gabriel Schenker
  • Spatial - estensione di Nhibernate per gestire i tipi di dati geografici in maniera semplice e uniforme.
                 Questo penso sia un aspetto particolarmente interessante visto che google Maps e satellitari affini stanno sempre più entrando nel nostro modo di vivere. Basti guardare ai nuovi tipi presenti nella versione 2008 di MsSql.
  • Search - fa uso di Lucene.NET (porting di un progetto java per una libreria di api per la ricerca full text)  (qui uno degli ultimi post di ayende a marzo 2009)
  • Linq 2 Nhibernate - provider Linq per Nhibernate (ha le stesse limitazioni delle query via Criteria) (da poco passato a 1.0 visto che è da un paio di anni in produzione ed è stabile) - da usare con .net3.5 sp1!
               Nota: per cominciare ad usare questa implementazione e sfruttuare tutte le facilitazioni derivanti da Linq consiglio di guardare i test unitari contenuti nei sorgenti svn, sopratutto il file example.cs che appunto contiene una serie esempi oserei dire 'lampanti' sull'uso di Linq2Nh.
    Questo provider fa parte del progetto Contrib e si basa sui Criteria. Con Nhibernate 3.0 invece avremo un linq provider nativo nel progetto basato su NHQ-AST
  • Shards - sembrerebbe l'ultimo nato in casa Contrib ed è un porting della controparte Java. In pratica è un framework che permette di semplificarsi la vita nel caso in cui si decida di spalmare orizzontalmente i dati, ovvero poggiare il proprio dominio su più database. Invevitabilmente le cose si complicano in una situazione del genere...ed ecco che interviene Shards. Al momento (settembre 2009) credo che il progetto sia in fase embrionale ancora.
  • Nhibernate.Validator - ottimo e semplice framework di validazione da accoppiare a Nhibernate.
    Nota: nell'ultima versione (1.2GA in linea con Nhibernate 2.1) è stata introdotta la configurazione con stile Fluent. Niente a che vedere con FluentNhibnernate: l'implementazione è interna e si chiama Loquacious.
    Inutile dire che rende il lavoro ancora più piacevole! Un'idea ve la potete fare grazie al post di Fabio Maulo. ps: Define(a => a.Data).IsInTheFuture().WithMessage("Back to the future!");
    Da QUI è possibile scaricare l'ultimissima versione con sorgenti ed esempi.
    OVVIAMENTE è possibile creare i propri validator. ANZI è gradita la partecipazione: da validator generici a validator italiani. Potete usare Jira per postare i vostri lavori.
  • FluentNhibernate -Lo stile fluent applicato alla parte di configurazione e mapping di nhibernate (in pratica fa uso delle lambda (=>) per permettere all'intellisense di visual studio di aiutare l'operazione di mapping sfruttando una serie di convenzioni predefinite e personalizzabili) -  il 23 maggio esce la 1.1
  • UnhAddins - risorsa non ufficiale (ma sempre seguito da Fabio Maulo) contenete codice per risolvere determinate situazioni con Nh. Sicuramente è un progetto da aprire e da studiare.
  • NHibernate HQL AST Parser - nel 2009 nasce il parser nhql-ast pensato per approdare nella rete in release con nh3.0 nel 2010/2011. Sostanzialmente si tratta di un nuovo parser con cui nh costruirà le query. Attualmente fa parte del progetto UnhAddins ma verrà integrato nella 3.0 di nh. Su questo progetto si basano molte cose tra cui il nuovo provider nativo di linq x nh.
  • ConfOrm -  progetto di Fabio Maulo (vedi post del suo blog) s'è fatto conoscere in data 2010/01/11 ed è un nuovo modo per mappare il dominio via API code invece che xml o attributi o il "simile" FluentNHibernate.

Progetti usati da Nhibernate per il suo "corretto" funzionamento:

  • Log4Net - framework di loggining particolarmente utile e usato. In pratica è già predisposto per loggare i messaggi indicati e spedirli via email, piuttosto che scriverli su un roll-log etc..
  • IESI.Collection - un progetto che permette l'implementazione sotto .NET di un tipo di collezione assente nel framework: il SET ovvero una collezione che non permette la duplicazione di elementi nel proprio insieme. Particolarmente sfruttato da Nhibernate per le collezioni entity.
    Ovviamente questo tipo di elemento di programmazione va a braccetto con tutti i concetti sull'identity degli elementi..
  • DynamicProxy - il più vecchio proxy utilizzato da Nhibernate (ora con la 2.1 è possibile scegliere il proprio proxy preferito) by CastleProject.
    La gestione del lazy load (e di standard per le collezioni) fa uso di proxy dinamici e trasparenti. Questo vuol dire che a develop-time non si avrà mai la sensazione di lavorare con delle proxy (sarà ben utile sapere che dietro possono esserci loro al posto della nostra entità completamente caricata).
  • LinFu - come DynamicProxy:(new!) sistema di generazione proxy dinamiche.

Progetti/utility esterne:

  • NhProfiler - by Ayende Rahien: utility per monitore/profilare la propria applicazione sviluppata con Nhibernate (** a pagamento **)
  • Test Example - codice di esempio di come creare un test per riprodurre l'errore da inviare via Jira (vedi sotto) per informare il team di sviluppo di un ipotetico e non errore riscontrato.
  • NhModeller - fa uso di un DSL per permettere in un'unica stesura la descrizione del dominio e la generazione relativa di classi, mapping e schema del database (by FaticaLab)
  • Nhibernate Query Analyzer - all'inizio progetto di Ayende poi di quanto capito abbandonato e ora gestito da altri sviluppatori. In sostanza aiuta la scrittura di query Nh language e di vederne in tempo reale la costruzione della query Sql.
  • Plug-in per Resharper - progetto un pò fermo e che onestamente a me non è mai andato...lo segnalo perchè magari prima o poi si riprende
  • ActiveWriter - plugin per visual studio per gestire classi e mapping (fermo da agosto del 2008)
  • HqlEditor by FaticaLab - qui home - controllo da usare in web/win project per avere un editor fornito di Intellisense per la stesura di query nhql sul proprio dominio! (by FaticaLab alias Felice Pollano)
  • NhWebConsole - i nteressante editor web di query nhql che da ora implementa HqlEditor di FaticaLab
  • ProxyGenerators - utility per generare proxy statici sulla base delle necessità del vostro dominio. Particolarmente utile per gli ambienti medium-trust (vedi articolo qui)
  • T4 Hbm 2.Net by FaticaLab -  auto-genera classi in c# per il vostro dominio sulla base dei file di mapping hbm attraverso il sistema di templating di vs T4
  • NHtrace - (new!) Nato il 17-05-2010: tool per eseguire tracing sulle query nhql/sql eseguite. Sfrutta i log generati attraverso log4net

 

Altri progetti satellite:

  • ActiveRecord - l'implementazione del pattern Active-Record (by Martin Fowler) per Nhibernate by CastleProject.
                       Grazie a questo progetto è possibile gestire il nostro dominio più come se fosse l'esatta copia della struttura del nostro database, rendendone molto semplice la gestione ma perdendo in parte l'idea di Dominio ( a mio avviso..).
  • NhibernateProvedier  - provider membership per asp.net 2.0 già pronto per l'uso
  • S#arp Architecture -  fw che si prefigge il compito di implementare Nhibernate in un "ambiente" MVC. Per farlo usa tutta una serie di fw come FluentNhibernate, Castle etc.. ad alcuni questa implementazione 'forzata' di fw non piace. Ad Aprile è stata rilasciata la relase 1.5 basata sul nuovo MVC 2.0
  • LinqSpecs - (new!) a giugno 'dichiarato' compatibile con Nh3.0 per l'implementazione del pattern 'specification' nelle query linq2nh.
  • Custom Fluent Nhibenernate Membership -  (new!) implementazione custom di provider membershio & role con mapping via fluent su CodeProject
      

 

Sistemi di distribuzione

  • Subversion - non solo il team di Nhibernate e affini fa uso di questo sistema di versioning per gestire le versioni di codice e le collaborazioni tra i vari addetti al lavoro. Comodo da usare per scaricare i sorgenti aggiornati. ( qui una microguida tra le tante)
  • TortoiseSvn - è un software che si integra nella shell di windows e permette di avere a colpo d'occhio la situazione della propria copia di lavoro rispetto all'ultima release contenuta nel repository gestito da svn.
  • Git - Altro sistema di versioning che sta prendendo piede (vedi post nel blog di Ayende). In questo post Fabio Maulo indica il fork su GitHub. da usare con msysgit (installare prima) e TortoiseGit (installare dopo).

Siti web:

  • NhForge - sito ufficile di Nhibernate (partito nel 2008). Consta di una sorta di community auto-gestita in cui è possibile contribuire con blog, articolo sul wiki, scaricare sorgenti e binari. Diciamo che vuol essere un pò il centro dell'universo di Nhibernate.
  • Jira - sistema di bug tracking sfruttato dal team di Fabio Maulo per gestire i progetti nh: se avete scoperto un errore o volete suggerire una miglioria (del resto il codice sorgente è disponibile a tutti) potete inviare la propria patch a questo sistema. Uno del team lo prenderà in carico e verrete contattati. Direi che è un ottimo sistema per contribuire e chiudere eventuali bug a tempo zero.-
  • Nhibernate-it - Gruppo di discussione italiano
  • NhUsers - Gruppo di discussion in inglese
  • Nhibernate Contrib - Gruppo di discussione inglese sullo sviluppo di Nhibernate contrib
  • Nhibernate Search site - motore di ricerca esclusivo su materiale riguardante nhibernate: in sostanza cerca esclusivamente in quei siti e risorse che si occupano prevalentemente di Nhibernate.
  • Success Stories - se avete ancora dei dubbi se usare o meno Nhibernate, potete guardare la lista dei casi di successo per farvi un'idea..
  • Best Practice - immancabile mega-tutorial su CodeProject sulle best practice da adottare nell'uso di Nhibernate

Tutorial/Libri:

  • NhForge Books - (new!)pagina dedicata ai libri su nhibernate direttamente dal sito ufficiale
  • Nhibernate In Action - un buon libro da dove imparare un bel pò su nhibernate : attenzione si riferisce a Nhibernate 1.2 ma è un ottima base di conoscenza!
  • Nhibernate 2 Beginner's guide by Aaron Cure -un libro uscito a maggio 2010 (segnalato da Fabio Maulo). Non letto -> Se qualcuno lo prende e scrive una recensione..
  • NHibernate with ASP.NET ProblemDesignSolution (Wrox Blox) - (new!) un libro uscito a xxxxxxxxxxxxxxxxxxx
  • -
  • Reference documentation - documentazione aggiornata su nhforge
  • Nhibernate API - su SourceForge potete verificare che tra i file che potete scaricare, a parte, c'è la documentazione API in formato chm: prima della 2.1.2 questo file non veniva rilasciato in quanto oneroso (40mb) e cmq poteva essere generato a partire dai sorgenti. Ora che lo spazio lo consente è liberamente scaricabile

 

Tipici (e brevi) How-To: -> sposterò in una sezione a parte

  • Criptare la string provider - in realtà è un articolo che spiega come creare una propria classe che si occupi di fornire a nhibernate un ConnectionProvider custom così da personalizzare molti aspetti.
  • Compilare Nh - è consigliato usare Nant (0.861) con il seguente comando: @tools\nant\NAnt.exe -t:net-3.5 -D:project.config=release clean package (updated!) a maggio 2010 è uscito nant 0.9!
  • Nhql o Criteria? - se la query è dinamicamente composta e/o volete facilmente ottenere una copia della query solo per il count: Criteria. Se invece volete una query sql like e sfruttare tutte le potenzialità di nhibrernate nql (alias ICriteria)
  • Problemi a passare alla 2.1.x: mentre le versioni precedenti di nh facevano uso di Castle per i proxy, ora invece è possibile usare la proxy preferita. Però bisogna specificarlo nella configurazione aggiungendo la direttiva come:
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
    oppure
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property> 
  •  Dove posso trovare i sorgenti aggiornati? - su SourceForge è disponibile l'svn a cui poter attingere. sotto 'trunk' trovate l'ultima versione (in fase di sviluppo) mentre sotto 'tags' le versioni nominali (solitamente le pubblicazioni) e sotto 'branches' i rami aggiuntivi come ad esempio la 2.1.2 (~svn/branches/2.1.x)
  • Con che licenza viene distribuito? - LGPL
  • Nhibernate può gestire più database contemporaneamente? - direi di si ma con alcuni trucchi vedi il truccho dello schema spiegato nel post di Mike Hadlow oppure si può usare burrow per gestire automaticamente più sessioni.
  • Intellisense per il mapping xml? - (new!) si può avere basta inserire nella directory 'Schemas' di Visual Studio (solitamente C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas - per vs2010: c:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas\) i file .xsd che trovate nei sorgenti di Nhibernate. Per comodità potete scaricare quelli della 2.1.2 da qui
  • Che differenza c'è tra i Dynamic-Componet dai component normali? - (new!) brevemente via dynamic-component si mappa una serie di campi dalla tabella in un Dictionary (map in java). Il vantaggi è quello di aggiungere dinamicamente nel database e nel mapping i campi senza cambiare la classe del dominio - approfondimento qui.
  • Dove posso trovare risposte alle mie domande? - (new!) a parte google, i vari newsgroup etc.. trovo molto utile StackOverflow che trovi qui

Brevi Tutorial/Esempi nel web:

  • MVC/Ninject - Non ho ancora avuto il tempo di leggere questo tutorial da 7 post di Jason Dentler, ma pare proprio interessante. Presente anche come post nel Blog di NhForge
  • WinForm e BindingList<T> e INotifyChanged - post di Fabio Maulo nel suo blog - spiega come usare in winForm una DataGridView per gestire collezioni di entità proprie al posto di una datatable attraverso l'implementazione di BindingList<T> dove T è l'entity o la sub-collection di una entità (e qui spiega anche come configurare nhibernate per usare BindingList all'inizializzazione dell'entità) e INotifyChanged per gestire le variazioni di valore dei membri delle entità.
  • Enum in Nhibernate 2.1 - questo post (By Andrei Volkov) mostra una delle novità di Nh2.1 rispetto a nh2.0 per quanto riguarda la gestione degli enum (cosa banale ma che inevitabilmente ci si para davanti prima o poi)
  • MVC-NerdDinner fluent - 3 post by bengtbe provano a ri-realizzare NerdDinner (by Scott) con Nhibernate e Fluent.
  • Cuyahoa - CMS open-source (a marzo-2010 è ancora in alpha la 2 che introduce la versione in MVC) che fa uso di Nhibernate per la persistenza
  • Esempio WinForm - post di Sebastiona Talamoni che propone un esempio in sorgenti e documentazione per implementare Nhibernate in winform
  • NerdDinner by Ayende - da questo post si evince che prima o poi avremo un'edizione di questo famoso progetto d'esempio anche da parte di Ayende.
  • Come eseguire query sul proprio repository - visuale completa di Fabio Maulo su tutti i modi possibili di interrogare il proprio repository via Nhibernate (es: HQL, Criteria, QueryOver, LINQ, H-SQL, SQL, Custom DSL)
  • Nhibernate Guides - post di Tomasz Modelski che come questo post, riassume e divide per argomenti post, guide etc.. ottimo!
  • Nhibernate FaQs - dal sito community di Jboss una lista di Faq che possono interessare (non mi sembra aggiornato: fine 2009 e siamo ad aprile 2010 ma non si sa mai che cresca)
  • Nhibernate quickstart guide - dal blog di NhForge una guida per iniziare a usare Nhibernate
  • WebCast di introduzione a Burrow - video introduttivo all'uso di Burrow in mvc
  • Testare la cache di 2o livello -  articolo interessante su CodeProject per testare la cache di 2o livello di Nhibernate
  • Iniettare session per request in MVC via Unity - dal blog di Giorgio Bozio un articolo su come usare Nhiberante sotto MVC iniettando ad un controller una sessione aperta al request attraverso Unity di MS
  • Improve Session Factory Initialization - (new!) si sa che la parte più onerosa (e lenta) gestita da nh è l'inizializzazione della factory in cui viene letto il mapping e predisposto alla creazione delle session. Questo articolo ufficiale su nhForge mostra come ottimizzare questo processo tramite serialized configuration.
  • Nhibernate stump the expert - (new!) 5 ore di video di una sessione by Ayende
  • Nhibernate summer screen casts -  (new!) sito che si prefigge il compito di diventare il punto di raccolta di tutti gli screen-casts su nhibernate.
  • Nhibernate Features - (new!) post su NhForge contenente la lista delle funzionalità proposte da Nhibernate
  • Il Pattern Specification e Linq 2 Nhibernate - (new!) un post fatto bene che spiega come implementare il pattern specification per rendere semplici query di selezione altrimenti complesse. Velocemente permette di concatenare con logica booleana questa e quella regola di business fino ad arrivare al risultato desiderato.
  • -
  • Atlanta - (new!) un progetto semplice per mostrare il funzionamento di Nhibernate. (a giugno 2010 c'è solo il codice nell'svn...nessun wiki o riferimento)
  •  

Blog da seguire

  • Ayende Rahien - blog particolarmente aggiornato. Ayende tende a scrivere post che facciano ragionare o che pongano domande piuttosto che lasciare tips di codice o soluzioni complete.
  • HunabKu - blog di Fabio Maulo project leader del porting di Nhibernate e di svariati altri progetti più o meno collegati (vedi NunitEx ad esempio) che pone l'accento sul codice e meccanismi di Nhibernate e dintorni.
  • The NHibernate FAQ - Blog gestito da Gabriel Schenker and Tom Opgenorth che racchiude svariati articoli interessanti
  • Scott White's - racchiude qualche articolo interessante su come far convivere nhibernate con Spring e l'IoC in generale

Supporti commerciali

  • Ayende - Lo stesso Ayende fornisce un supporto commerciale (un pò dispendioso ma sicuramente di alto livello)
  • iMeta - azienda che sponsorizza la realizzazione di Nh2Linq offre un supporto commerciale economico (notizia presa da Ayende, settembre 2009)

Personaggi chiave

Storia delle versioni

  • 3.0 - dovrebbe arrivare per fine anno 2010 - conterrà funzionalità come le MultiQuery, Future stabile, Linq nativo basato su HQL-AST, userà .net 3.5 (in teoria: a maggio è stato lanciato un pool per decidere se sarà 3.5 o 4.0)
  • 2.1.2 - 2009-11-25 l'attuale (scrivo a marzo/aprile 2010) GA
  • 2.1.0 - 2009-07-26
  • 2.0.1 - 2008-09-29 comparabile con Hibernate 3.2
  • 1.2.1 - 2007-11-26 l'ultima versione ga della 1.x - supporto per .net 2.0, generics, store procedure
  • 1.0 - primo porting del progetto Java Hibernate della versione 2.1

 

Infine - Progetti usati da chi usa Nhibernate:

  • Nunit - framework per test unitari. Inutile testare 1000 volte un software. Ha molto più senso creare un codice che esegua delle verifiche per noi della validità delle nostre assunzioni su come il codice dovrebbe comportarsi. Una volta fatto questo sarà possibile eseguire i test anche 10.000 volte in maniera del tutto automatica, sapendo che ogni cambiamento del nostro codice non ha cambiato le carte in tavolo (guardarsi i principi dell'Agile Programming).
    Nota: guardarsi bene la breve (!) lista di membri di Assert e non usare solo Assert.IsTrue(..,..) ovunque..
  • NunitEx - set di extension per NUnit by Fabio Maulo.
                 Con questo set di asserzioni possiamo migliorare la leggibilità dei nostri test rendendoli di fatto ben più efficenti e informativi.
  • Rhino Mocks - framework di Mock by Ayende Rahien (da usare per semplificare il testing sugli elementi con Nunit).
  • Moq - altro framework per Mocking: vorrebbe essere il più semplice fw
  • Nant - utility per l'automazione del processo di build ("necessario" per compilare nhibernate: ora è uscita anche la 0.90 final)
  • NantBuilder - IDE per la gestione dei processi Nant
  • Rake - OT: un'altra utility di automazione del processo di build. A differenza di Nant le tasks sono descritte attraverso Ruby Language al posto di un file di configurazione xml. Lo riporto perché trovo sempre più post in cui consigliano la migrazione a questo sistema. Es post di Makka e TDDeveloper Blog
  • Gallio - OT: per completezza aggiungo anche questo platform per l'automation tasks che pare essere interessante.

 

Un grazie a Fabio Maulo per i consigli/correzioni.

Se avete da contribiure scrivete pure ;)

La stessa guida la potete trovare come post nel gruppo ital

 
Tags: