NHibernate: document identifier
- Abbiamo la necessità di generare un codice univoco;
- Questo codice univoco deve essere umanamente leggibile e avere un significato nel mondo reale, quindi niente guid;
- Il codice generato deve sottostare a delle regole, come ad esempio:
- deve essere progressivo, e la progressione potrebbe dipendere dall’uso: numerica, alfabetica, quellochemicipiaceame… :-)
- potrebbe avere una logica di reset: il numero fattura si resetta ad inizio anno ad esempio;
- etc…
In che modo NHibernate ci può essere di aiuto? da questa necessità è nato un thread, con Fabio Maulo, sullo user group italiano di NHibernate.
Fabio propone di:
- definire la logica di generazione come entità di dominio;
- definire nello schema del db una tabella che ospita le caratteristiche di questa logica:
- ad esempio ultimo numero generato e data di generazione dell’ultimo numero, nel caso di una fattura;
- in fase di insert
- caricare da db questa entità;
- chiederle di generare un nuovo id;
- eseguire l’update, del “generatore”, e l’insert della nuova entità, ad esempio la fattura, con un lock;
A mio modo di vedere questo è uno di quei problemi molto borderline da un lato la logica di generazione del “numero documento” è logica di business ma dall’altro è strettamente dipendendente dallo storage e il boss propone di automatizzare questo giro, ergo una possibilità sono gli eventi di NHIbernate per inserirsi nella pipeline di salvataggio e a questo punto fare il bello e cattivo tempo.
.m