<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnetcampania.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Architettura: sfatiamo i luoghi comuni…</title><link>http://dotnetcampania.org/wikis/articoli/architettura-sfatiamo-i-luoghi-comuni.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Architettura: sfatiamo i luoghi comuni…</title><link>http://dotnetcampania.org/wikis/articoli/architettura-sfatiamo-i-luoghi-comuni.aspx</link><pubDate>Fri, 12 Jun 2009 17:42:12 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:3</guid><dc:creator>Michele Aponte</dc:creator><comments>http://dotnetcampania.org/wikis/articoli/architettura-sfatiamo-i-luoghi-comuni/comments.aspx</comments><description>Current revision posted to Articoli by Michele Aponte on 12/06/2009 19:42:12&lt;br /&gt;
&lt;p&gt;Conscio della grande confusione che si fa sui termini &lt;i&gt;&amp;quot;tecnici&amp;quot;&lt;/i&gt; utilizzati nel nostro campo, confusione che io stesso non ho timore ad ammettere, ho pensato che come primo articolo per DotNetCampania potesse essere utile fare un po&amp;#39; di chiarezza sul significato dei termini che utilizzeremo in questa serie di articoli sull&amp;#39;architettura e le applicazioni enterprise.&lt;/p&gt;
&lt;p&gt;Cominciamo subito dalla definizione stessa di architettura, che meraviglia delle meraviglie, &amp;egrave; standardizzata dalla norma ANSI/IEEE Std 1471-2000, la quale ci dice che l&amp;#39;architettura &amp;egrave;&amp;nbsp;&lt;/p&gt;
&lt;p align="center"&gt;&lt;i&gt;&amp;quot;The fundamental organization of a system embodied in&lt;/i&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;i&gt;its components, their relationships to each other,&lt;/i&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;i&gt;and to the environment, and the&lt;/i&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;i&gt;principles guiding its design and evolution&amp;quot;&lt;a name="_ftnref1" href="/tiny_mce/plugins/paste/blank.htm#_ftn1"&gt;&lt;b&gt;[1]&lt;/b&gt;&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Quindi possiamo dire che con il termine architettura intendiamo l&amp;#39;organizzazione di un sistema in componenti relazionati tra di loro, che interagiscono con l&amp;#39;ambiente circostante secondo dei principi, principi progettuali, principi che ne guidano la progettazione e l&amp;#39;evoluzione.&lt;/p&gt;
&lt;p&gt;Chi &amp;egrave; dunque l&amp;#39;architetto? Secondo IEEE &amp;egrave; la persona, il team, l&amp;#39;azienda responsabile dell&amp;#39;architettura del sistema. Semplice? Si, ma quanto spesso confondiamo questo figura con l&amp;#39;analista o il project manager? D&amp;#39;accordo, possono essere la stessa persona, ma non svolgono assolutamente lo stesso ruolo. Quindi:&amp;nbsp;&lt;/p&gt;
&lt;p align="center"&gt;&lt;b&gt;Architetto != Analista &amp;amp;&amp;amp; Architetto != Project Manager&lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;O per gli irriducibili di Visual Basic:&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;b&gt;Architetto &amp;lt;&amp;gt; Analista AND Architetto &amp;lt;&amp;gt; Project Manager&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;L&amp;#39;analista &amp;egrave; un esperto del dominio applicativo, delle regole che devono governare il sistema, che in linea di massima pu&amp;ograve; non essere un tecnico, anzi, meglio! In questo modo &amp;egrave; libero da pregiudizi implementativi che potrebbero influenzare il suo modo di percepire i requisiti del cliente, potendosi concentrare unicamente sul COSA e non sul COME.&lt;/p&gt;
&lt;p&gt;Il Project Manager &amp;egrave; tutto altro, e wikipedia &amp;egrave; chiarissima sull&amp;#39;argomento:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&amp;quot;Il &lt;b&gt;project manager&lt;/b&gt; &amp;egrave; un ruolo di gestione operativa. Tale figura &amp;egrave; il responsabile unico della valutazione, pianificazione, realizzazione e controllo di un progetto. [...] Il suo obiettivo essenziale &amp;egrave; quello di assicurare il rispetto dei costi, dei tempi e della qualit&amp;agrave; concordati e soprattutto il raggiungimento della soddisfazione del committente.&amp;quot;.&lt;/i&gt; &lt;a name="_ftnref2" href="/tiny_mce/plugins/paste/blank.htm#_ftn2"&gt;[2]&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Non sarei riuscito a dirlo meglio.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Un altro errore molto comune e confondere l&amp;#39;architettura con il design di un&amp;#39;applicazione, il design al limite &amp;egrave; una parte dell&amp;#39;architettura ma non &amp;egrave; l&amp;#39;architettura, cosa che si evince chiaramente dalla definizione data sopra:&amp;nbsp;&lt;/p&gt;
&lt;p align="center"&gt;&lt;b&gt;Design &lt;/b&gt;Є&lt;b&gt; &lt;/b&gt;&lt;b&gt;Architettura&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cosa fa dunque un architetto? Potremmo riassumere il suo lavoro nei seguenti punti:&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Prende i requisiti passatigli dall&amp;#39;analista.&lt;/li&gt;
&lt;li&gt;Suddivide il sistema in sottosistemi assegnabili ad un singolo programmatore o a un gruppo di lavoro.&lt;/li&gt;
&lt;li&gt;Verifica se &amp;egrave; il caso di utilizzare componenti gi&amp;agrave; esistenti per alcuni sottosistemi.&lt;/li&gt;
&lt;li&gt;Crea le specifiche da passare ai programmatori per la realizzazione del sistema.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Analizziamo questi punti. Ok, l&amp;#39;analista ha finito il suo lavoro e ci consegna i requisiti da soddisfare, da questo momento in poi questo o questi documenti diventano il nostro vangelo, ma giusto per farci un&amp;#39;idea cerchiamo di capire che cosa ha fatto in assenza dello spirito santo per redigere il nostro testo sacro.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Per prima cosa &amp;egrave; andato dal cliente e ha individuato gli &lt;b&gt;stakeholder&lt;/b&gt;, cio&amp;egrave; quei personaggi a cui deve letteralmente estorcere le informazioni che gli sono necessarie per stabilire quali sono i requisiti del sistema da realizzare.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vi state domandando perch&amp;eacute; estorcere? Molto banalmente perch&amp;eacute; non &amp;egrave; assolutamente detto che sappiano cosa vogliono veramente ed &amp;egrave; qui che si vede la bravura di un analista: ridimensionare gli stakeholder su quello che un sistema software pu&amp;ograve; fare e concordare insieme quello di cui veramente hanno bisogno per ottenere un vantaggio dall&amp;#39;utilizzo del sistema che ci si appresta a realizzare.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Se alla fine del processo gli stakeholder sono soddisfatti il progetto avr&amp;agrave; successo, il che significa che probabilmente saremo pagati per il nostro lavoro, in caso contrario cominciate a chiamare l&amp;#39;avvocato. Finite le interviste e le riunioni con gli stakeholder l&amp;#39;analista definisce i &lt;b&gt;requisiti funzionali e non funzionali (scalabilit&amp;agrave;, sicurezza, ecc.)&lt;/b&gt;, di cui parleremo nel dettaglio nel prossimo articolo sull&amp;#39;architettura.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ricevuti i requisiti e studiatili con attenzione l&amp;#39;architetto comincia a suddividere il sistema in sottosistemi sempre pi&amp;ugrave; piccoli in modo da rendere possibile la valutazione tempi e risorse. Lo scopo in questa fase e determinare il &amp;quot;costo del sistema&amp;quot; in modo da permettere a chi di dovere di verificare i margini del budget disponibile o a definire il costo preventivo con il quale fare l&amp;#39;offerta al cliente.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;E&amp;#39; questo il momento in cui l&amp;#39;architetto decide se eventualmente &amp;egrave; il caso di utilizzare componenti gi&amp;agrave; pronte, commerciali o non, per alcuni sottosistemi cercando di tenere a bada la sua natura di programmatore che lo esorterebbe a mettere alla prova le sue capacit&amp;agrave; tecniche!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;L&amp;#39;ultima fase del suo lavoro consiste nel creare le specifiche da fornire ai programmatori per la realizzazione del sistema, il cui livello di dettaglio varia a seconda della complessit&amp;agrave; del sistema e delle competenze delle risorse coinvolte: si va da una descrizione passo passo del lavoro da svolgere, con tanto di use-case, class e sequence&amp;nbsp; diagram (in alcuni casi mi &amp;egrave; anche capitato di dover scrivere le query SQL o Linq da utilizzare), alla semplice descrizione del caso d&amp;#39;uso lasciando piena autonomia allo sviluppatore.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Nei prossimi articoli analizzeremo questi passi in maniera pi&amp;ugrave; approfondita progettando insieme un ipotetico sistema di esempio, dandoci dei requisiti e realizzando la documentazione necessaria. Naturalmente i vostri feedback e le vostre idee saranno fondamentali per simulare un vero e proprio brain storming tra architetti al fine di fare le giuste scelte per il problema che ci porremo. Alla prossima puntata.&lt;br clear="all" /&gt;&lt;/p&gt;
&lt;hr align="left" /&gt;
&lt;p&gt;&lt;a name="_ftn1" href="/tiny_mce/plugins/paste/blank.htm#_ftnref1"&gt;[1]&lt;/a&gt; http://www.iso-architecture.org/ieee-1471/&lt;/p&gt;
&lt;p&gt;&lt;a name="_ftn2" href="/tiny_mce/plugins/paste/blank.htm#_ftnref2"&gt;[2]&lt;/a&gt; http://it.wikipedia.org/wiki/Project_manager&lt;/p&gt;</description></item></channel></rss>
