Questa volta la carovana del .NET tour mi ha portato, dopo le belle esperienze di XE.NET e degli Architecure Days, in terra marchigiana. Appena arrivato ho incontrato Gian Maria Ricci con cui abbiamo discuisito sul fatto che le presenze "straniere" al meeting fossero maggiori rispetto a quelle locali; secondo me questo fatto dovrebbe inorgoglire coloro che hanno organizzato questo meeting; persone che provengono da Arezzo (il sottoscritto), da Livorno e persino da Bari vi mostrano come gli argomenti che avete trattato siano di primissimo livello.....Prima dell'inizio della sessione di Simone,ho conosciuto l'eclettico Igor che dire..... tutto un personaggio
Cominciamo adesso a buttar giù le riflessioni ricavate dalle varie Sessioni. La prima quella di Simone CodeClimber Chiaretta ha dapprima definito il concetto di Continuos Integration mostrando come questa pratica risolva molti dei conflitti derivanti dal lavoro in team. I componenti fondamentali alla base della CI sono:
- Un Source Control che fornisca un repository condiviso del codice
- Un processo di Build automatico
- Un processo di Testing composto da Unit Testing e/o Functional Testing che permetta di valutare la qualità del software prodotto
- Un processo di Verifica che permette di stimare le metriche software tramite tool quali FxCop e NDepend
Successivamente è stato introdotto CruiseControl.NET ennesimo porting dell'equivalente progetto Java... CC.NET è composto da tre componenti fondamentali:
- Integration Server, implementato tramite un servizio Windows, ha il compito di lanciare i file di build raccogliendo i log dei tool eseguiti durante il building ed orchestrando l'intero processo di integrazione avvalendosi di un processo di polling verso Source Control.
- WebDashBoard che permette di monitorare quale siano i progetti sui quali si fanno le build fornendo inoltre una dettagliata reportistica.
- CCTRay, piccola utility che permette di aggiornare lo stato di build dei vari progetti utilizzando i WebService esposti dalla WebDashBoard.
Giudizio senz'altro che positivo quello espresso per la sessione di Simone anche se l'emozione iniziale ha reso l'esposizione a volte non proprio chiarissima. Dopo un breve coffee break caratterizzato dall'assaggio di ottimi Cantuccini l'attenzione della platea è salita ai massimi livelli per le sessioni di Marco De Santis e GianCarlo Sudano incentrate sull' utilizzo di un ORM. Sin da subito entrambi gli speaker hanno evidenziato come l'adozione di un ORM all'interno di un progetto non sia una scelta da effettuare a priori ma debba essere ponderata in base al contesto operativo:in uno scenario che preveda massicce operazioni di tipo batch su grosse mole di dati un codice sql ottimizzato avrà prestazioni migliori; Marco ha introdotto i punti di forza di un ORM riferendosi in particolar modo ad NH, spiegando successivamente le attività di scheduling e snapshoting eseguite dall'oggetto Session. Chiariti i concetti sul ciclo di vità delle entity è stata mostrata l'ottimizzazione a livello di roundtrip verso il database effettuata da NH che va sotto il nome di Transparent Write Behind. Detto ciò gli speaker sono passati ad introdurre un altra feature davvero potente di NH: il Dirty Checking; quest'ultimo permette di generare UPDATE/INSERT dinamici in modo tale da specificare ad esempio l'aggiornamento non dell'oggetto in esame nella sua interezza bensi solamente di singoli campi. NH offre allo sviluppatore diverse strategie con cui effettuare il recupero delle informazioni: è possibile scegliere ad esempio tra una strategia di tipo Eager in cui le SELECT si basano su degli OUTER JOIN di cui è possibile controllarne la profondità oppure lo sviluppatore può scegliere una strategia Lazy in cui vengono caricati dei Proxy e le SELECT vengono generate all'occorrenza; questo elevato grado di flessibilità permette allo sviluppatore di effettuare il fine tuning del retrieving delle informazioni.
La seconda parte della sessione di NH è stata portata avanti da cannonata Janky... La sessione ha mostrato come si possa persistere un grafo di oggetti interconnessi rappresentante il nostro domain model (nel caso in esame una squadra di pallavoliste svedesi ) evidenziando le problematiche che lo sviluppatore si trova ad affrontare nei confronti di un domain model anche se composto da poche entità. La trasperenza con cui NH può essere utilizzato si rispecchia nella quasi totale agnosticità con cui vengono modellate le classi di dominio.... dico quasi totale in quanto ogni entity dovrebbe definire una chiave univoca con la quale identificarsi ed un campo version con il quale effettuare il lock ottimistico; queste best practice permettono di sfruttare al meglio le caratteristiche di NH in quanto gli permettono di identificare in quale stato si trovi l' entity in esame. GianCarlo facendo uso del tracer di SqlServer ha sniffato un pò (lo sappiamo adora fare queste cose...) per mostrare il codice generato da NH nei casi in cui avessimo variato la strategia di fetching... Janky ha brevemente mostrato la varie modalità con cui è possibile effettuare il recupero delle informazioni :
- Sql Nativo
- HQL (linguaggio di interrogazione ad oggetti a cui si ispira DLinq)
- QbE ( query basate su example)
- QbC (query basate sui criteria)
Durante la sessione sono state fatte domande sul legame presente fra la Session di ASP.NET e la Session di NH in cui Janky ha evidenziato come mettere la sessione di NH dentro quella di ASP nn sia una buona soluzione in quanto la Session di NH potrebbe rimanere aperta veramente a lungo.Una delle tante soluzioni prevede di aprire una sessione di NH per ogni WebRequest. Sicuramente la sessione di Janky è stata un pò troppo zippata come accaduto anche a Milano a causa delle molte discussioni aperte per le sessioni precedenti; un peccato perchè sono sicuro che GianCarlo avrebbe voluto parlarci almeno per un altra mezz'oretta...sarà per il prossimo meeting. Concludo salutando il livornese Matteo e facendo i miei complimenti a tutti
Ad maiora.....