Nhibernate e dintorni

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:

 

Progetti strettamente correlati:

  • Contrib - è una serie di librerie che fanno da "contributo" ufficiale a Nhibernate (comprende: burrow, caches, validator, mapping attributes, linq, shards (new!)) - 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.
  • 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)
  • 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.

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).

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)

 

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..).

 

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.
  • 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.

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.
  • Nhibernate In Action - un buon libro da dove imparare un bel pò su 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/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 - progetto di content managment fatto in nhibernate...è possibile vedere i sorgenti
  • 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!

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

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).
  • Nant - utility per l'automazione del processo di build
  • 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: