<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Feed RSS</title>
    <link>http://www.aspitalia.com/</link>
    <description>descrizione</description>
    <dc:language>it-it</dc:language>
    <generator>RSS Generated by ASPItalia.com</generator>
    <managingEditor>Gestore(gestore@sito.ext)</managingEditor>
    <webMaster>Gestore(gestore@sito.ext)</webMaster>
    <copyright>(C)</copyright>
    <item>
      <title>Community Days: da Query Object a O/RM</title>
      <link>http://blogs.ugidotnet.org/pape/archive/2008/07/02/community-days-da-query-object-a-orm.aspx</link>
      <pubDate>Wed, 02 Jul 2008 11:24:42 GMT</pubDate>
      <description>&lt;p&gt;Ok, sembra che il &lt;a href="http://www.manageddesigns.it/news/detail.aspx?ID=6e0c2851-be93-4cb2-bb3e-334063bbc73d" target="_blank"&gt;corso&lt;/a&gt; di settimana scorsa sia &lt;a href="http://blogs.ugidotnet.org/Nick60/archive/2008/06/27/93200.aspx" target="_blank"&gt;piaciuto&lt;/a&gt; e che, per l'ennesima volta, il tempo non sia stato sufficiente, giacchè Alessio &lt;a href="http://blogs.ugidotnet.org/Nick60/archive/2008/06/27/93200.aspx#1376947" target="_blank"&gt;avrebbe gradito un approfondimento&lt;/a&gt; sul tema "Query Object". Provo a "rimediare" :-)&lt;/p&gt;  &lt;p&gt;In realtà la richiesta di Alessio sottointende 3 distinte tematiche:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;"Query Object": chi era costui? &lt;/li&gt;    &lt;li&gt;Implementazione "hand made" di un DAL capace di gestire in maniera sensata la persistenza di un DM &lt;/li&gt;    &lt;li&gt;Produzione "al volo" del codice SQL &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Andiamo in ordine: il design pattern &lt;a href="http://martinfowler.com/eaaCatalog/queryObject.html" target="_blank"&gt;query object&lt;/a&gt; è una specializzazione di &lt;a href="http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/PatternInterpreter.html" target="_blank"&gt;Interpreter&lt;/a&gt; che si pone l'obbiettivo di definire un object model in grado di rappresentare una query SQL. Ciò significa, in pratica, permettere ad un sistema di produrre a runtime un grafo che definisca una query che il DAL si preoccuperà di eseguire restituendone il risultato. "Sbarazzandosi" da un punto di vista logico di SQL, il nostro sistema guadagna potenzialmente l'indipendenza da uno specifico RDBMS o, volendo estremizzare, da una specifica tecnologia/architettura di persistenza. Esempi di query object sono la Criteria API di (N)Hibernate o, se volete un esempio più semplice, il query model di &lt;a href="http://www.codeplex.com/NSK" target="_blank"&gt;&lt;strong&gt;NSK&lt;/strong&gt;&lt;/a&gt; che è stato espressamente pensato per risultare "digeribile", pur rununciando all'obbiettivo di poter rappresentare il 100% delle query. Infine, LINQ è *il* query model idiomatico offerto dai compilatori "2008" di C# e VB (ricordiamo che un "idioma" è un omologo "technology specific" di un design pattern)&lt;/p&gt;  &lt;p&gt;Disporre di un query model è però solo l'inizio, poichè occorre "qualcuno" in grado di eseguirlo: questo "qualcuno" è il DAL. E qui le strade sono fondamentalmente 2: a valle del parsing del grafo ottenuto istanziando il "query object", il codice SQL lo scriviamo noi o cerchiamo di produrlo "al volo".&lt;/p&gt;  &lt;p&gt;Nel primo caso, indipendentemene dal fatto che SQL sia "embedded" nella applicazione o "confinato" nelle stored procedure, ci si accorge presto che, usando un DM, il DAL dovrebbe offrire servizi quali: gestione della concorrenza, lazy load...&lt;/p&gt;  &lt;p&gt;La soluzione è "semplice" e consiste nel creare dei proxy per le classi del DM: Markino &lt;a href="http://blogs.ugidotnet.org/Markino/archive/2006/01/05/32476.aspx" target="_blank"&gt;ha bloggato&lt;/a&gt; già in passato (oddio, sono già passati oltre due anni... sto invecchiando!!!!) la strategia che usiamo in &lt;a href="http://www.manageddesigns.it/" target="_blank"&gt;&lt;strong&gt;Managed Designs&lt;/strong&gt;&lt;/a&gt; per produrre i proxy, e che è possibile osservare maggiormente in dettaglio analizzando il sorgente del DAL "SQL Server" di NSK: in sintesi, si tratta di definire i proxy come classi &lt;em&gt;internal&lt;/em&gt; al DAL effettuando l'override degli opportuni membri del DM e/o estendendo opportunamente quest'ultimo (per esempio, per la gestione del lock ove si usino gli "original value" e non un &lt;em&gt;timestamp&lt;/em&gt;/numero di versione della riga).&lt;/p&gt;  &lt;p&gt;Infine... Arriviamo al "punto 3": produrre codice SQL "al volo". Nell'ultimo anno ho dovuto implementare un O/RM "custom" a causa di un requisito non funzionale (ergo, il cliente chiedeva che l'applicazione usasse *esclusivamente* il FX 2.0 e quindi "nisba &lt;strong&gt;NHibernate&lt;/strong&gt; o librerie esterne"): oltretutto, mi occorrevano feature che ad oggi nemmeno NH offre, quali il mapping di entità "frammentate" (presente in NH 2 ma non in 1.2, ossia l'ultima release GA) o la possibilità di mappare il DM su database differenti (nel senso che pezzi distinti dello stesso grafo provengono da db differenti), con tutte le immaginabili conseguenze a livello di distribuzione delle transazioni in fase di persistenza. &lt;/p&gt;  &lt;p&gt;Non ho dubbi nell'affermare che sia stata una delle sfide maggiormente probanti della mia "carriera professionale" e che mi ha permesso di comprendere molto più profondamente il mondo degli O/RM rispetto a quando ero "solo" un "utente" di NH e &lt;strong&gt;Genome&lt;/strong&gt;. Ad aver tempo da "perdere", è un esperienza che consiglierei a tutti &amp;lt;g&amp;gt;&lt;/p&gt;  &lt;p&gt;Ecco, il punto 3 è un po' troppo complesso per pensare di trattarlo in un post "mattone" come questo: è il motivo per il quale ho aggiunto la sessione &lt;strong&gt;"O/RM Inside Out"&lt;/strong&gt; nella agenda dei &lt;a href="http://www.communitydays.it/events/communitydays2008milano.aspx" target="_blank"&gt;&lt;strong&gt;Community Days 2008&lt;/strong&gt;&lt;/a&gt;. Sarà una sessione praticamente "slide free" e nella quale approcceremo il mondo degli O/RM da un punto di vista differente da quello tipicamente adottato nelle sessioni dedicate a questo argomento: vi assicuro che, anche come "utenti", "dopo" non saremo più gli stessi :-)&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7d110363-db92-47b0-947b-bcd8ee2e44ee" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/Community%20Days" rel="tag"&gt;Community Days&lt;/a&gt;,&lt;a href="http://technorati.com/tags/design%20patterns" rel="tag"&gt;design patterns&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Managed%20Designs" rel="tag"&gt;Managed Designs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/NSK" rel="tag"&gt;NSK&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ORM" rel="tag"&gt;ORM&lt;/a&gt;,&lt;a href="http://technorati.com/tags/query%20object" rel="tag"&gt;query object&lt;/a&gt;,&lt;a href="http://technorati.com/tags/UGIdotNET" rel="tag"&gt;UGIdotNET&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/pape/aggbug/93256.aspx" width="1" height="1" /&gt;</description>
      <dc:creator>Andrea Saltarello</dc:creator>
      <comments>http://blogs.ugidotnet.org/pape/archive/2008/07/02/community-days-da-query-object-a-orm.aspx</comments>
      <guid>http://blogs.ugidotnet.org/pape/archive/2008/07/02/community-days-da-query-object-a-orm.aspx</guid>
    </item>
    <item>
      <title>Iscrizioni aperte per i Community Days 2008</title>
      <link>http://blogs.aspitalia.com/daniele/post2293/Iscrizioni-Aperte-Community-Days-2008.aspx</link>
      <pubDate>Tue, 03 Jun 2008 12:20:00 GMT</pubDate>
      <description>&lt;img src='http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2293' border="0" style="width:1px; height:1px;" /&gt;Non c'è poi altro da dire, se non che l'agenda finale sarà disponibile entro pochi giorni. &lt;a href="http://www.communitydays.it/events/communitydays2008milano.aspx" target="_blank"&gt;Iscrivetevi&lt;/a&gt;! &lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASPItalia.com/" rel="tag"&gt;ASPItalia.com&lt;/a&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2008 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description>
      <dc:creator>Daniele Bochicchio</dc:creator>
      <comments>http://blogs.aspitalia.com/daniele/post2293/Iscrizioni-Aperte-Community-Days-2008.aspx</comments>
      <guid>http://blogs.aspitalia.com/daniele/post2293/Iscrizioni-Aperte-Community-Days-2008.aspx</guid>
    </item>
    <item>
      <title>Community Days 2008: le track</title>
      <link>http://blogs.ugidotnet.org/pape/archive/2008/05/28/community-days-2008-le-track.aspx</link>
      <pubDate>Wed, 28 May 2008 13:15:20 GMT</pubDate>
      <description>&lt;p&gt;Anche se l'&lt;a href="http://www.communitydays.it/events/communitydays2008milano.aspx" target="_blank"&gt;agenda&lt;/a&gt; è ben lontana dall'essere completa, l'impianto dei &lt;a href="http://www.communitydays.it/events/communitydays2008milano.aspx" target="_blank"&gt;Community Days 2008&lt;/a&gt; è ormai delineato: 5 track e, in generale, un "taglio" un po' differente da quello degli eventi precedenti. Spesso, in passato, ci siamo scientemente concentrati sulla &lt;em&gt;presentazione&lt;/em&gt; o sull'&lt;em&gt;approfondimento&lt;/em&gt; di tool/tecnologie/metodologie, cercando di essere (tra) i primi ad affrontare le novità a qualunque livello di approfondimento: dalla "mia" sessione dedicata ad OOD a &lt;a href="http://www.ugidotnet.org/workshops/workshops_detail.aspx?ID=f3098942-2469-4016-b69f-c0a14098ada5" target="_blank"&gt;marzo 2003&lt;/a&gt; fino alla &lt;a href="http://www.ugidotnet.org/workshops/workshops_detail.aspx?ID=4f0c90f5-2d7b-4cfc-b524-33b8013a79c7" target="_blank"&gt;presentazione di ASP.NET MVC&lt;/a&gt; svolta lo scorso dicembre, passando per l'&lt;a href="http://www.ugidotnet.org/workshops/workshops_detail.aspx?ID=0317198a-2e57-4b86-890e-45fafaf01df0" target="_blank"&gt;Agile workshop&lt;/a&gt; di settembre 2003 o il "&lt;a href="http://www.ugidotnet.org/workshops/workshops_detail.aspx?ID=8908075f-5547-4f6e-a18b-9c6eb8ec7703" target="_blank"&gt;double&lt;/a&gt; &lt;a href="http://www.ugidotnet.org/workshops/workshops_detail.aspx?ID=135b6bcb-641e-4ec2-bf55-b553c56ee097" target="_blank"&gt;Whidbey&lt;/a&gt;" del 2004, questo è spesso stato il nostro &lt;em&gt;modus operandi&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Questa volta è diverso. FX 3.5 è in RTM dallo scorso novembre e tutti noi, chi più e chi meno, ha già "smanettato". L'unica vera novità all'orizzonte si chiama SP1 (che infatti richiede un discorso -e una track- a parte), ma a me e &lt;a href="http://blogs.aspitalia.com/daniele/" target="_blank"&gt;Daniele&lt;/a&gt; è sembrato fosse giunto il momento di orientarsi verso il &lt;em&gt;fare&lt;/em&gt; più che verso l'&lt;em&gt;introdurre e&lt;/em&gt; &lt;em&gt;approfondire&lt;/em&gt;. Ecco la novità: ad eccezione delle track &lt;strong&gt;SP1&lt;/strong&gt; e &lt;strong&gt;Underground&lt;/strong&gt;, i prossimi Community Days rappresentano un "mega HOW TO" che cercherà di concentrarsi sulla risoluzione di problemi *reali* e *specifici*, rendendo la tecnologia uno "strumento" e non un "fine".&lt;/p&gt;  &lt;p&gt;Da Castle alla Enterprise Library, da NH ai gusti di Linq, non ci saranno "primi cittadini": il focus sarà sullo scenario e sulla soluzione, il resto è fuffa. Tutto ciò premesso, ecco un breve "abstract" delle track:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;: è la track dedicata agli scenari nei quali il pilastro della soluzione è una tecnologia od un prodotto. A puro titolo di esempio, una soluzione di orchestration basata su BizTalk vedrebbe una naturale collocazione in questa track&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Application Development&lt;/strong&gt;: è la track destinata a contenere le sessioni il cui focus è costituito dalla realizzazione di applicazioni destinate ad un utente finale&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Undergroud&lt;/strong&gt;: è la track per i visionari, interessati a scoprire soluzioni innovative a problemi complessi&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Tutorial&lt;/strong&gt;: è la track destinata a presentare "micro" scenari e la soluzione al "problema nel problema"&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;SP1&lt;/strong&gt;: in questa track mostreremo le novità più importanti introdotte dal service pack 1 del framework 3.5&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;More to come: nel frattempo, per le discussioni c'è il &lt;a href="http://forum.ugidotnet.org/m.asp?g=76&amp;amp;function=firstload" target="_blank"&gt;forum&lt;/a&gt; :-)&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:febed7fa-5d7e-4f60-8d3a-360855770e4d" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/Community%20Days" rel="tag"&gt;Community Days&lt;/a&gt;,&lt;a href="http://technorati.com/tags/UGIdotNET" rel="tag"&gt;UGIdotNET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/GUISA" rel="tag"&gt;GUISA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASPItalia" rel="tag"&gt;ASPItalia&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/pape/aggbug/92851.aspx" width="1" height="1" /&gt;</description>
      <dc:creator>Andrea Saltarello</dc:creator>
      <comments>http://blogs.ugidotnet.org/pape/archive/2008/05/28/community-days-2008-le-track.aspx</comments>
      <guid>http://blogs.ugidotnet.org/pape/archive/2008/05/28/community-days-2008-le-track.aspx</guid>
    </item>
  </channel>
</rss>