<?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>Pattern o non pattern?</title>
      <link>http://blogs.ugidotnet.org/pape/archive/2008/07/18/pattern-o-non-pattern.aspx</link>
      <pubDate>Fri, 18 Jul 2008 12:12:47 GMT</pubDate>
      <description>&lt;p&gt;Raffaeu mi porge un (gradito) &lt;a href="http://blogs.ugidotnet.org/pape/archive/2008/07/17/refresh4-per-nsk.aspx#1381384" target="_blank"&gt;complimento&lt;/a&gt;, che è però anche un interessante spunto per una riflessione. BTW, niente di nuovo all'orizzonte, perchè è una riflessione che ho già ampiamente esposto durante il tutorial dei &lt;a href="http://www.communitydays.it/" target="_blank"&gt;Community Days&lt;/a&gt;, ma ritengo comunque interessante estenderla.&lt;/p&gt;  &lt;p&gt;Un moderno emulo di Gian Battista Vico non esiterebbe ad includere il seguente scenario tra i "corsi e ricorsi storici": quando un dev entra in contatto con i [design|architecture|refactoring|vattelapesca] pattern la reazione è, tipicamente, una delle seguenti:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Il dev diventa un "pattern fanatic": parla continuamente di pattern e li infila dappertutto (un divertente "asse cronologico"" di questo scenario 1 è disponibile in [&lt;a href="http://jimmynilsson.com/" target="_blank"&gt;Nilsson&lt;/a&gt;, ADDD.NET]) &lt;/li&gt;    &lt;li&gt;Il dev li rifiuta in quanto (scegliere il proprio "best pick"): inutili, "acquacaldosi", eccessivamente astratti, ... &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Ma i pattern rappresentano (o aggiungono) davvero un valore? Parliamone :-) &lt;/p&gt;  &lt;p&gt;Partendo dal presupposto che la soluzione sia basata sul FX .NET o comunque implementata utilizzando un linguaggio che aderisca al paradigma object oriented, quando "progettiamo" ("to design" in inglese) un sistema dovremmo farlo tenendo *bene* in mente i &lt;em&gt;requisiti&lt;/em&gt; e i &lt;em&gt;princìpi&lt;/em&gt; di progettazione OO; i requisiti rappresentano ciò che il sistema deve fare e per un architetto sono "sacri ed inviolabili" giacchè:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Se funzionali, sono di competenza di un analista che ha *sicuramente* una comprensione del dominio  superiore alla nostra &lt;/li&gt;    &lt;li&gt;Se non funzionali, sono frutto di qualche accordo "contrattuale" (es: SLA) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ergo, non è certo inclusa nella "carta dei diritti" di un architetto la possibilità di modificarli a propria volontà. Per quanto riguarda i requisiti, inoltre, la &lt;a href="http://en.wikipedia.org/wiki/ISO_9126" target="_blank"&gt;norma ISO9126&lt;/a&gt; svolge un ottimo lavoro di categorizzazione e rende evidente la natura di requisito di "topic" (troppo) spesso trascurati quali (a puro titolo di esempio ed in rigoroso ordine alfabetico): &lt;em&gt;interoperability&lt;/em&gt;, &lt;em&gt;security&lt;/em&gt; e &lt;em&gt;testability&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Affrontato il "cosa", dedichiamoci al "come": un buon architetto è un uomo (o donna) di... Sani princìpi :-) Dal primordiale "&lt;em&gt;...you must find pertinent objects...&lt;/em&gt;" ai vari DIP/LSP/OCP/SRP/... essi sono il "razionale" che ci deve guidare nelle nostre scelte progettuali a qualunque livello di dettaglio. Se anche i pattern non esistessero, questi principi ci permetterebbero in ogni caso di scrivere del "buon codice". Ma i pattern esistono, quindi... Che fare? Semplicemente, non vivere "inseguendoli" (i pattern). Non "snobbiamoli/ignoriamoli", ma impariamo ad evere un approccio rilassato nei loro confronti. Affrontiamo un problema alla volta e, se avessimo l'evidenza che quello che stiamo affrontando sia risolto da un pattern, usiamolo senza remore: nessuno oggi si inventa una tecnica risolutiva per il problema "gestione di un documento strutturato" quando esiste &lt;a href="http://en.wikipedia.org/wiki/Composite_pattern" target="_blank"&gt;Composite&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Spesso però confondiamo una congettura con una evidenza, e dovremmo invece migliorare la nostra capacità di riconoscere le congetture. Di fronte ad una congettura, trasformiamoci in Pollicino ed usiamo requisiti e principi come "traccia" per affrontare lo scenario: facendolo sistematicamente realizzeremo comunque una soluzione strutturalmente simile a "qualche" pattern, nel qual caso valuteremo se un "refactoring to &lt;em&gt;quel&lt;/em&gt; pattern" possa portare del valore aggiunto, altrimenti... Squadra che vince non si cambia :-)&lt;/p&gt;  &lt;p&gt;In (estrema e quindi approssimativa) sintesi: i pattern possono essere un "fine" (refactoring to pattern) od un "mezzo" (abbiamo un problema *chiaramente* risolto da un pattern in modo ottimale), e a volte "il fine giustifica i mezzi". Di certo non "sono" un valore, anche se "hanno" valore, giacchè sono "soluzioni *dimostrate* funzionanti a problemi ricorrenti".&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:635c8dac-536b-4c46-a6bc-a11d37aa225c" 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/design%20pattern" rel="tag"&gt;design pattern&lt;/a&gt;,&lt;a href="http://technorati.com/tags/refactoring%20to%20patterns" rel="tag"&gt;refactoring to patterns&lt;/a&gt;,&lt;a href="http://technorati.com/tags/software%20architecture" rel="tag"&gt;software architecture&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/pape/aggbug/93448.aspx" width="1" height="1" /&gt;</description>
      <dc:creator>Andrea Saltarello</dc:creator>
      <comments>http://blogs.ugidotnet.org/pape/archive/2008/07/18/pattern-o-non-pattern.aspx</comments>
      <guid>http://blogs.ugidotnet.org/pape/archive/2008/07/18/pattern-o-non-pattern.aspx</guid>
    </item>
    <item>
      <title>Community Days 2008: my 2 (euro) cents</title>
      <link>http://blogs.ugidotnet.org/pape/archive/2008/07/11/community-days-2008-my-2-euro-cents.aspx</link>
      <pubDate>Fri, 11 Jul 2008 16:16:51 GMT</pubDate>
      <description>&lt;p&gt;&lt;em&gt;Durante la (ancora una volta ho scoperto piacevolmente che può funzionare) Q&amp;amp;A finale ho capito che il plurale del termine Community non è Communities ma Community...solo più grossa. &lt;/em&gt;&lt;em&gt;Esattamente come due stormi formano...uno stormo. Da queste piccole riflessioni possono nascere grandi cose.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;E' una affermazione che esprime fedelmente il mio pensiero, e che IMVHO richiede una profonda sensibilità per essere pensata e &lt;a href="http://blogs.ugidotnet.org/odamiani/archive/2008/07/11/93355.aspx" target="_blank"&gt;formulata&lt;/a&gt;. Non mi stupisce che l'autore sia Omar &lt;/p&gt;  &lt;p&gt;Da parte mia... Grazie a tutti: erano anni che non provavo una &lt;a href="http://blogs.ugidotnet.org/pape/archive/2004/10/01/WorkshopWebDevelopment.aspx" target="_blank"&gt;emozione simile&lt;/a&gt;, e questa volta non ho nemmeno dovuto vestirmi come "una trottola" :-)&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0b23483e-091c-4b66-a911-fbb0d51fccb2" 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;/div&gt;&lt;img src="http://blogs.ugidotnet.org/pape/aggbug/93366.aspx" width="1" height="1" /&gt;</description>
      <dc:creator>Andrea Saltarello</dc:creator>
      <comments>http://blogs.ugidotnet.org/pape/archive/2008/07/11/community-days-2008-my-2-euro-cents.aspx</comments>
      <guid>http://blogs.ugidotnet.org/pape/archive/2008/07/11/community-days-2008-my-2-euro-cents.aspx</guid>
    </item>
    <item>
      <title>Community Days: last minute</title>
      <link>http://blogs.ugidotnet.org/pape/archive/2008/07/07/community-days-last-minute.aspx</link>
      <pubDate>Mon, 07 Jul 2008 20:04:36 GMT</pubDate>
      <description>&lt;p&gt;Ok, &lt;a href="http://blogs.aspitalia.com/daniele/post2310/Buoni-Community-Days-2008-ME.aspx" target="_blank"&gt;Daniele non si sarà&lt;/a&gt; (ma ha buoni motivi ed ottimi sostituti) e &lt;a href="http://forum.ugidotnet.org/b.asp?m=69350" target="_blank"&gt;mercoledi sera si va a cena&lt;/a&gt; (accodatevi al thread sul forum/NG per aderire così prenotiamo posti sufficienti). &lt;/p&gt;  &lt;p&gt;Gli annunci "last minute" però non finiscono qui. Osserviamo la seguente sequenza:&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://download.ugidotnet.org/blog/pape/images/CD2008/SequenceDiagram.png" /&gt; &lt;/p&gt;  &lt;p&gt;Ipotizzando che:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Create(an order)&lt;/strong&gt; sia invocato da un &lt;em&gt;controller&lt;/em&gt; implementato in una applicazione MVC basata sul framework MVC di Microsoft &lt;/li&gt;    &lt;li&gt;Il data context sia iniettato usando &lt;strong&gt;Unity&lt;/strong&gt;, il container IoC della &lt;strong&gt;Enterprise Library 4.0&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Parte delle business rules siano implementate usando il &lt;strong&gt;Validation Application Block&lt;/strong&gt; della &lt;strong&gt;Enterprise Library&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;L'ordine sia effettivamente persistito usando &lt;em&gt;Sua Maestà&lt;/em&gt; &lt;strong&gt;NHibernate&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;L'applicazione sia coperta da test implementati con &lt;strong&gt;MSTest&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Buona parte di quanto esposto sia stato implementato (tempo permettendo) *anche* usando lo stack di &lt;strong&gt;CastleProject&lt;/strong&gt; (&lt;strong&gt;Monorail&lt;/strong&gt;+&lt;strong&gt;Windsor&lt;/strong&gt;) -del quale già &lt;a href="http://blogs.ugidotnet.org/topics" target="_blank"&gt;Mauro&lt;/a&gt; parlerà abbondantemente nella sua sessione- nonchè &lt;strong&gt;NUnit&lt;/strong&gt; per i test &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Beh, allora avremmo una idea del contenuto del &lt;a href="http://www.communitydays.it/events/communitydays2008milano/tut303.aspx" target="_blank"&gt;tutorial "Implementare architetture layered"&lt;/a&gt; che abbiamo aggiunto in agenda.&lt;/p&gt;  &lt;p&gt;Ha ragione Simone: questi CD sono orientati al "nuovo". In effetti apparentemente in giro non c'è (ancora) nulla di equivalente, in attesa del &lt;em&gt;remake&lt;/em&gt; de "L'attacco dei Cloni" &amp;lt;g&amp;gt; Ci vediamo mercoledi?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Mi dicono dalla regia che (testuali parole) "Salvo imprevisti le sessioni saranno registrate"&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:23258443-e990-40d8-8fc5-a8cfd999f357" 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/Enterprise%20Library" rel="tag"&gt;Enterprise Library&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IoC" rel="tag"&gt;IoC&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MVC" rel="tag"&gt;MVC&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/93312.aspx" width="1" height="1" /&gt;</description>
      <dc:creator>Andrea Saltarello</dc:creator>
      <comments>http://blogs.ugidotnet.org/pape/archive/2008/07/07/community-days-last-minute.aspx</comments>
      <guid>http://blogs.ugidotnet.org/pape/archive/2008/07/07/community-days-last-minute.aspx</guid>
    </item>
  </channel>
</rss>