<feed xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns="http://www.w3.org/2005/Atom" xml:lang="it-IT">
    <title>Emanuele's blog</title>
    <link rel="self" type="application/atom+xml" href="http://blogs.ugidotnet.org/manuel0081/Atom.aspx" />
    <subtitle type="html">Around .Net</subtitle>
    <id>http://blogs.ugidotnet.org/manuel0081/Default.aspx</id>
    <author>
        <name>Emanuele Prato</name>
        <uri>http://blogs.ugidotnet.org/manuel0081/Default.aspx</uri>
    </author>
    <generator uri="http://subtextproject.com" version="Subtext Version 2.1.0.3">Subtext</generator>
    <updated>2010-03-03T19:37:11Z</updated>
    <entry>
        <title>La busta paga</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/manuel0081/archive/2010/02/27/la-busta-paga.aspx" />
        <id>http://blogs.ugidotnet.org/manuel0081/archive/2010/02/27/la-busta-paga.aspx</id>
        <published>2010-02-27T12:11:27Z</published>
        <updated>2010-03-03T19:37:11Z</updated>
        <content type="html">&lt;p&gt;Iniziamo da: "il datore di lavoro ha l'obbligo di consegnare il prospetto paga" (Legge n.4 del 1953).&lt;/p&gt;
&lt;p&gt;La busta paga si divide in:&lt;/p&gt;
&lt;p&gt;Intestazione&lt;/p&gt;
&lt;p&gt;Corpo&lt;/p&gt;
&lt;p&gt;Dati previdenziali, Dati fiscali, TFR, Retribuzione netta.&lt;/p&gt;
&lt;p&gt;Nell'intestazione si trovano tutti i dati anagrafici della ditta e del lavoratore: posizione INPS, INAIL,  Matricola, Cognome, Nome, Codice Fiscale, Data di assunzione e tutti gli elementi retributivi:&lt;/p&gt;
&lt;p&gt;Mese di retribuzione, Sede di lavoro, Contratto di lavoro con livello e qualifica, Elementi del trattamento salariale e i giorni retribuiti/lavorati del mese.&lt;/p&gt;
&lt;p&gt;Quello che più conta nell'intestazione sono i valori di: Paga base, Contingenza, eventuale Elemento distinto della retribuzione, Scatti di anzianità, Altri elementi.&lt;/p&gt;
&lt;p&gt;Mi soffermerei su questi altri elementi: le aziende italiane giocano molto sul superminimo assorbibile. Cosa è il superminimo? Uno dei tanti imbrogli del mondo del lavoro. &lt;/p&gt;
&lt;p&gt;In teoria dovrebbe funzionare cosi: &lt;/p&gt;
&lt;p&gt;2010: ho uno stipendio di mille euro&lt;/p&gt;
&lt;p&gt;2011: chiedo o mi viene riconosciuto un aumento di 100 euro&lt;/p&gt;
&lt;p&gt;2011: ho uno stipendio di millecento euro&lt;/p&gt;
&lt;p&gt;2012: chiedo o mi viene riconosciuto un aumento di 100 euro&lt;/p&gt;
&lt;p&gt;2012: ho uno stipendio di milleduecento euro&lt;/p&gt;
&lt;p&gt;2013: chiedo o mi viene riconosciuto un aumento di 100 euro&lt;/p&gt;
&lt;p&gt;2013: ho uno stipendio di milletrecento euro&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3 aumenti, stipendio di 1300 euro&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In pratica funziona così:&lt;/p&gt;
&lt;p&gt;2010: ho uno stipendio di mille euro (di cui 900 di stipendio e 100 di superminimo)&lt;/p&gt;
&lt;p&gt;2011: chiedo o mi viene riconosciuto un aumento di 100 euro&lt;/p&gt;
&lt;p&gt;2011: l'azienda si avvale del superminimo e ho ancora uno stipendio di mille euro (di cui 1000 di stipendio e 0 di superminimo)&lt;/p&gt;
&lt;p&gt;2012: chiedo o mi viene riconosciuto un aumento di 100 euro&lt;/p&gt;
&lt;p&gt;2012: l'azienda lo deposita sul superminimo quindi ho uno stipendio di 1000 + 100 di superminimo&lt;/p&gt;
&lt;p&gt;2013: chiedo o mi viene riconosciuto un aumento di 100 euro&lt;/p&gt;
&lt;p&gt;2013: l'azienda si avvale del superminimo e ho ancora uno stipendio di millecento euro (di cui 1100 di stipendio e 0 di superminimo)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3 aumenti, stipendio di 1100 euro&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/manuel0081/aggbug/98108.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/manuel0081/comments/98108.aspx</wfw:comment>
        <slash:comments>10</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/manuel0081/comments/commentRss/98108.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/manuel0081/services/trackbacks/98108.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Quiz: extension methods</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/manuel0081/archive/2010/02/14/quiz-extension-methods.aspx" />
        <id>http://blogs.ugidotnet.org/manuel0081/archive/2010/02/14/quiz-extension-methods.aspx</id>
        <published>2010-02-14T10:47:40Z</published>
        <updated>2010-02-14T10:51:19Z</updated>
        <content type="html">&lt;p&gt;&lt;span&gt;Quale sarà l'output?&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span style="COLOR: blue"&gt;namespace&lt;/span&gt; Extensions&lt;br /&gt;{&lt;br /&gt;  &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; System;&lt;br /&gt;  &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; ExtensionMethodsDemo1;&lt;br /&gt;&lt;br /&gt;     &lt;span style="COLOR: green"&gt;// Define extension methods for any type that implements IMyInterface.&lt;/span&gt;&lt;br /&gt;     &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; Extension&lt;br /&gt;     {&lt;br /&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; MethodA(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt; IMyInterface myInterface, &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(&lt;span style="COLOR: maroon"&gt;&lt;span style="COLOR: maroon"&gt;"Extension.MethodA(this IMyInterface myInterface, int i)"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; MethodA(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt; IMyInterface myInterface, &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; s) &lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(&lt;span style="COLOR: maroon"&gt;&lt;span style="COLOR: maroon"&gt;"Extension.MethodA(this IMyInterface myInterface, string s)"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; MethodB(&lt;span style="COLOR: blue"&gt;this&lt;/span&gt; IMyInterface myInterface) &lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(&lt;span style="COLOR: maroon"&gt;&lt;span style="COLOR: maroon"&gt;"Extension.MethodB(this IMyInterface myInterface)"&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;span style="COLOR: blue"&gt;namespace&lt;/span&gt; ExtensionMethodsDemo1&lt;br /&gt;{&lt;br /&gt;    &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; System;&lt;br /&gt;    &lt;span style="COLOR: blue"&gt;using&lt;/span&gt; Extensions;&lt;br /&gt;&lt;br /&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; interface IMyInterface&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; MethodB();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; A : IMyInterface &lt;br /&gt;    {&lt;br /&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; MethodB(){Console.WriteLine(&lt;span style="COLOR: maroon"&gt;&lt;span style="COLOR: maroon"&gt;"A.MethodB()"&lt;/span&gt;&lt;/span&gt;);}&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; B : IMyInterface&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; MethodB() { Console.WriteLine(&lt;span style="COLOR: maroon"&gt;&lt;span style="COLOR: maroon"&gt;"B.MethodB()"&lt;/span&gt;&lt;/span&gt;); }&lt;br /&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; MethodA(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i) { Console.WriteLine(&lt;span style="COLOR: maroon"&gt;&lt;span style="COLOR: maroon"&gt;"B.MethodA(int i)"&lt;/span&gt;&lt;/span&gt;); }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; C : IMyInterface&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; MethodB() { Console.WriteLine(&lt;span style="COLOR: maroon"&gt;&lt;span style="COLOR: maroon"&gt;"C.MethodB()"&lt;/span&gt;&lt;/span&gt;); }&lt;br /&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; MethodA(object obj) { Console.WriteLine(&lt;span style="COLOR: maroon"&gt;&lt;span style="COLOR: maroon"&gt;"C.MethodA(object obj)"&lt;/span&gt;&lt;/span&gt;); }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; ExtMethodDemo&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Main(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;            A a = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; A();&lt;br /&gt;            B b = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; B();&lt;br /&gt;            C c = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; C();&lt;br /&gt;            TestMethodBinding(a,b,c);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; TestMethodBinding(A a, B b, C c)&lt;br /&gt;        {&lt;/pre&gt;
&lt;pre&gt;	    //copy from here...&lt;br /&gt;            a.MethodA(1);        //write here     &lt;br /&gt;            a.MethodA(&lt;span style="COLOR: maroon"&gt;&lt;span style="COLOR: maroon"&gt;"hello"&lt;/span&gt;&lt;/span&gt;);  //write here&lt;br /&gt;            a.MethodB();         //write here         &lt;br /&gt;&lt;br /&gt;            b.MethodA(1);        //write here    &lt;br /&gt;            b.MethodB();         //write here       &lt;br /&gt;            b.MethodA(&lt;span style="COLOR: maroon"&gt;&lt;span style="COLOR: maroon"&gt;"hello"&lt;/span&gt;&lt;/span&gt;);  //write here   &lt;br /&gt;&lt;br /&gt;            c.MethodA(1);        //write here  &lt;br /&gt;            c.MethodA(&lt;span style="COLOR: maroon"&gt;&lt;span style="COLOR: maroon"&gt;"hello"&lt;/span&gt;&lt;/span&gt;);  //write here &lt;br /&gt;            c.MethodB();         //write here &lt;/pre&gt;
&lt;pre&gt;            //...to here &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;[Fonte: MSDN]&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/manuel0081/aggbug/98008.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/manuel0081/comments/98008.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/manuel0081/comments/commentRss/98008.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/manuel0081/services/trackbacks/98008.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Extension methods</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/manuel0081/archive/2010/02/14/extension-methods.aspx" />
        <id>http://blogs.ugidotnet.org/manuel0081/archive/2010/02/14/extension-methods.aspx</id>
        <published>2010-02-14T10:14:53Z</published>
        <updated>2010-02-14T10:43:06Z</updated>
        <content type="html">&lt;p&gt;Gli extension methods permettono a metodi statici di essere richiamati usando la sintassi dei metodi di istanza. Questi metodi devono avere almeno un parametro che rappresenta l'istanza del metodo su cui operare. In C# su questo parametro si utilizza la parola chiave this.&lt;/p&gt;
&lt;pre&gt;public static class StringExtensions{&lt;/pre&gt;
&lt;pre&gt;    public static bool IsPalindrome(this string s){&lt;/pre&gt;
&lt;pre&gt;       ...&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;p&gt;Questo metodo viene richiamato nel seguente modo:&lt;/p&gt;
&lt;pre&gt;if("hello world".IsPalindrome()){&lt;/pre&gt;
&lt;pre&gt;  ....&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;p&gt;La classe che definisce l'extension method viene definita "sponsor" e deve essere statica. Ovviamente va importato il namespace della classe sponsor.&lt;/p&gt;
&lt;p&gt;Vanno usati il minimo indispensabile ;)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[Fonte: &lt;span id="btAsinTitle"&gt;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (2nd Edition)&lt;/span&gt; - K. Cwalina, B. Abrams - Addison Wesley - 2009]&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/manuel0081/aggbug/98007.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/manuel0081/comments/98007.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/manuel0081/comments/commentRss/98007.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/manuel0081/services/trackbacks/98007.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Malattia nel Contratto del Commercio</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/manuel0081/archive/2010/02/07/malattia.aspx" />
        <id>http://blogs.ugidotnet.org/manuel0081/archive/2010/02/07/malattia.aspx</id>
        <published>2010-02-07T10:55:29Z</published>
        <updated>2010-02-07T10:56:14Z</updated>
        <content type="html">&lt;p&gt;Un'altra di quelle cose che mi ha sconcertato...&lt;/p&gt;
&lt;p&gt;Nel Contratto del Commercio (e parlo di quello nazionale) la malattia viene retribuita in maniera davvero singolare:&lt;/p&gt;
&lt;p&gt;Per i primi 3 giorni viene corrisposto il 100% dello stipendio (periodo di carenza) ed è carico del datore di lavoro.&lt;/p&gt;
&lt;p&gt;Dal 4° al 20° giorno è previsto il 75% (!) della paga: 50% a carico dell'INPS e 25% a carico del datore di lavoro.&lt;/p&gt;
&lt;p&gt;Dal 21° giorno in poi (fino al limite di 180 giorni) è previsto nuovamente il 100% ma suddiviso tra: 66,66% INPS, 33,34% a carico del datore di lavoro.&lt;/p&gt;
&lt;p&gt;Rinvio a un secondo post il calcolo perchè è davvero complicato.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/manuel0081/aggbug/97961.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/manuel0081/comments/97961.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/manuel0081/comments/commentRss/97961.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/manuel0081/services/trackbacks/97961.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Rimborsi chilometrici</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/manuel0081/archive/2010/02/05/rimborsi-chilometrici.aspx" />
        <id>http://blogs.ugidotnet.org/manuel0081/archive/2010/02/05/rimborsi-chilometrici.aspx</id>
        <published>2010-02-05T19:54:23Z</published>
        <updated>2010-02-05T19:54:23Z</updated>
        <content type="html">&lt;p&gt;Buono a sapersi...&lt;/p&gt;
&lt;p&gt;In caso di trasferta al dipendente è dovuto il rimborso delle spese che ha sostenuto in base alle tabella ACI. Ma attenzione ne esistono di due tipi:&lt;/p&gt;
&lt;p&gt;1. Costi chilometrici (Per calcolare i rimborsi al dipendente (o al professionista) che faccia uso del proprio veicolo svolgendo attività a favore del datore di lavoro.) &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.aci.it/index.php?id=1850"&gt;http://www.aci.it/index.php?id=1850&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Fringe benefit (Per calcolare la retribuzione in natura derivante dalla concessione di veicoli aziendali in uso ai dipendenti, per esigenze di lavoro e per esigenze private.) &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.aci.it/index.php?id=93"&gt;http://www.aci.it/index.php?id=93&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I servizi sono accessibili direttamente dal sito dell'ACI (dove viene spiegata chiaramente la differenza): &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.aci.it/index.php?id=86"&gt;http://www.aci.it/index.php?id=86&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Attenzione che i secondi sono più bassi nei primi (almeno nei casi che ho verificato). Per la mia auto addirittura si dimezzano!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/manuel0081/aggbug/97958.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/manuel0081/comments/97958.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/manuel0081/comments/commentRss/97958.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/manuel0081/services/trackbacks/97958.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Pseudoquiz - Tanti modi per fare una cosa</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/manuel0081/archive/2010/01/15/pseudoquiz-tanti-modi-per-fare-una-cosa.aspx" />
        <id>http://blogs.ugidotnet.org/manuel0081/archive/2010/01/15/pseudoquiz-tanti-modi-per-fare-una-cosa.aspx</id>
        <published>2010-01-15T20:22:35Z</published>
        <updated>2010-01-15T20:22:35Z</updated>
        <content type="html">&lt;p&gt;Stimolerei il vostro "modo di programmare". Immaginate di avere una combo su una pagina web [c#].&lt;/p&gt;
&lt;p&gt;Vi chiedo di riempirla con i giorni della settimana sapendo che nell'applicazione ci sono molte combo di quel tipo.&lt;/p&gt;
&lt;p&gt;La pagina web deriva da una BasePage : System.Web.UI.Page e ha un metodo già pronto richiamato dalla OnLoad che si chiama PrepareCombo().&lt;/p&gt;
&lt;p&gt;Sentiamo varie soluzioni (ovviamente ottimizzate tempi di sviluppo con buon codice). Nei commenti sono ben accette le critiche alle soluzioni proposte.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/manuel0081/aggbug/97867.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/manuel0081/comments/97867.aspx</wfw:comment>
        <slash:comments>8</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/manuel0081/comments/commentRss/97867.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/manuel0081/services/trackbacks/97867.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Rinnovo patente</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/manuel0081/archive/2010/01/07/rinnovo-patente.aspx" />
        <id>http://blogs.ugidotnet.org/manuel0081/archive/2010/01/07/rinnovo-patente.aspx</id>
        <published>2010-01-07T18:26:28Z</published>
        <updated>2010-01-10T13:05:26Z</updated>
        <content type="html">&lt;p&gt;Vediamo di mettere in codice anche questo evento della vita quotidiana che mi è capitato proprio oggi.&lt;/p&gt;
&lt;p&gt;Come prima idea mi verrebbe da scrivere una classe Patente non statica, istanziarla:&lt;/p&gt;
&lt;pre&gt;Patente myPatente = new Patente();&lt;/pre&gt;
&lt;p&gt;poi per il rinnovo:&lt;/p&gt;
&lt;pre&gt;myPatente.Rinnova();&lt;/pre&gt;
&lt;p&gt;dove il metodo non fa altro che aggiornare una proprietà pubblica Anni o privata _anni:&lt;/p&gt;
&lt;pre&gt;public void Rinnova()&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre&gt;     _anni += 10;&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;p&gt;Questo è sbagliato per vari motivi:&lt;/p&gt;
&lt;p&gt;1. La proprietà privata ha un nome troppo generico (cosa indicano questi anni?);&lt;/p&gt;
&lt;p&gt;2. La nomenclatura più appropriata sarebbe Durata e non Anni;&lt;/p&gt;
&lt;p&gt;3. Bisognerebbe aggiornarla ogni anno e per il momento non ci interessa. Ci interessa conoscere la validità non per quanti anni è ancora valida.&lt;/p&gt;
&lt;p&gt;Già da queste riflessioni si capisce che dovremo agire su delle date. Salto quindi il passaggio di aggiornare una proprietà chiamata Durata. Cambio il codice:&lt;/p&gt;
&lt;pre&gt;public void Rinnova()&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre&gt;   _dataDiScadenza.AddYears(10);&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;p&gt;Questo codice va già meglio. Leggendo però il funzionamento di rinnovo di una patente, c'è un altro errore. Cambio il codice:&lt;/p&gt;
&lt;pre&gt;public void Rinnova(DateTime dataRinnovo)&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre&gt;   _dataUltimoRinnovo = dataRinnovo;&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;p&gt;E si nota subita che non occorre un metodo ma basta utilizzare il set della proprietà. Quindi semplicemente nel codice (non nella classe):&lt;/p&gt;
&lt;pre&gt;myPatente.DataUltimoRinnovo = Convert.ToDateTime(txtDataRinnovo.Text);&lt;/pre&gt;
&lt;p&gt;Soprassediamo sul Convert e sui controlli da effettuare dato che non è l'intento di questo post.&lt;/p&gt;
&lt;p&gt;Nella classe Patente avremo invece la proprietà&lt;/p&gt;
&lt;pre&gt;public DateTime DataScadenza&lt;/pre&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre&gt;   get {return _dataUltimoRinnovo.AddYears(10);}&lt;/pre&gt;
&lt;pre&gt;}&lt;/pre&gt;
&lt;p&gt;Anche qui non mi soffermo sul giorno effettivo di scadenza. In questo caso è importante aggiungere (correggetelo con il commento appropriato con tre ///):&lt;/p&gt;
&lt;p&gt;// Indica la data di scadenza della patente calcolata come data del rinnovo incrementata di 10 anni.&lt;/p&gt;
&lt;p&gt;public DateTime DataScadenza&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;   get {return _dataUltimoRinnovo.AddYears(10);}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Ovviamente quel 10 non va bene cablato nel codice. E' risaputo inoltre che la durata dipende dall'età della persona; d'altro canto una patente esiste se collegata a una persona. Il rapporto è 1 a 1 (spero). Su un ipotetico database sarebbe (imho) mettere la fk sulla tabella Patenti (quindi un IDPersona). Analogamente dovrebbe accadere nella classe. Qui si può discutere se collegare solo la data di nascita della persona o l'intera Persona. Nel primo caso, probabilmente, ci occorrerebbe anche l'IDPersona, quindi opterei per il secondo caso se non è particolarmente oneroso. Da valutare se stiamo costruendo una classe per un'applicazione specifica o una classe in stile "utility".&lt;/p&gt;
&lt;p&gt;[continua]&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Tutto il codice di questo articolo è scritto di getto; mi scuso per eventuali errori.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/manuel0081/aggbug/97817.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/manuel0081/comments/97817.aspx</wfw:comment>
        <slash:comments>3</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/manuel0081/comments/commentRss/97817.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/manuel0081/services/trackbacks/97817.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Buon Natale e Felice Anno Nuovo!</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/manuel0081/archive/2009/12/22/buon-natale-e-felice-anno-nuovo.aspx" />
        <id>http://blogs.ugidotnet.org/manuel0081/archive/2009/12/22/buon-natale-e-felice-anno-nuovo.aspx</id>
        <published>2009-12-22T17:42:27Z</published>
        <updated>2009-12-22T17:42:27Z</updated>
        <content type="html">Buon Natale a tutti! Ci rivediamo l'anno prossimo!  &lt;img alt="" src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/teeth_smile.gif" /&gt;&lt;img src="http://blogs.ugidotnet.org/manuel0081/aggbug/97751.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/manuel0081/comments/97751.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/manuel0081/comments/commentRss/97751.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/manuel0081/services/trackbacks/97751.aspx</trackback:ping>
    </entry>
    <entry>
        <title>I programmatori colpiscono ancora</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/manuel0081/archive/2009/12/04/i-programmatori-colpiscono-ancora.aspx" />
        <id>http://blogs.ugidotnet.org/manuel0081/archive/2009/12/04/i-programmatori-colpiscono-ancora.aspx</id>
        <published>2009-12-04T21:08:01Z</published>
        <updated>2009-12-04T21:08:01Z</updated>
        <content type="html">&lt;p&gt;Ho comprato un appartamento da un annetto e sono subentrato al precedente proprietario a ottobre 2008. Nel rendiconto condominiale di quest'anno mi sono state addebitate (erroneamente secondo me) dei conti e conguagli antecedenti a ottobre 2008 e sono quindi andato a contestare dal mio amministratore.&lt;/p&gt;
&lt;p&gt;Lui ha guardato nel suo software della Buffetti (mi ha detto) e ha estrapolato il conto per suddividerlo tra me e il precedente proprietario. Ha premuto un tasto e ha ottenuto un calcolo pesato in base ai giorni del rendiconto (ad esempio se il rendiconto partiva dal 1 settembre e io sono subentrato il 15 ottobre, veniva fatta la divisione del conto per il numero dei giorni tra il 1/9 e il 14/10 per il precedente proprietario, il resto per me).&lt;/p&gt;
&lt;p&gt;Al che la mia natura di ingegnere informatico si è risvegliata: il conto non era corretto! O meglio, questo tipo di calcolo si poteva attribuire solo a determinati conti di difficile separazione rispetto alla data del 15 ottobre. Ma tutto ciò che era antecedente andava attribuito al precedente proprietario senza pesare (figuratevi alcuni conti del 2006!!!). La risposta è stata che tutti fanno così e che il programma non lo permette!!!&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/confused_smile.gif" /&gt;&lt;/p&gt;
&lt;p&gt;Che per fare una modifica ci si mette anche un anno... etc etc. Io gli ho risposto che i programmi non possono coprire tutti i casi e che per alcune questioni occorre fare i calcoli a mano proprio come avevo fatto io (io infatti avevo rifatto tutti i calcoli a manina seguendo l'esempio del rendiconto annuale). La sua risposta? E ma ora c'è il programma... questo funziona così... è prassi... Gli ho dovuto dire che ero un ingegnere informatico per far valere la mia attendibilità...&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif" /&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;In realtà ho scoperto che il programma è ovviamente personalizzabile per determinate necessità.&lt;/p&gt;
&lt;p&gt;Morale delle favola è sempre lo stesso: smettiamola di facilitare il lavoro degli altri e continuiamo a renderci necessari!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/manuel0081/aggbug/97666.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/manuel0081/comments/97666.aspx</wfw:comment>
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/manuel0081/comments/commentRss/97666.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/manuel0081/services/trackbacks/97666.aspx</trackback:ping>
    </entry>
    <entry>
        <title>General naming conventions</title>
        <link rel="alternate" type="text/html" href="http://blogs.ugidotnet.org/manuel0081/archive/2009/11/21/general-naming-conventions.aspx" />
        <id>http://blogs.ugidotnet.org/manuel0081/archive/2009/11/21/general-naming-conventions.aspx</id>
        <published>2009-11-21T19:06:52Z</published>
        <updated>2009-11-22T21:39:07Z</updated>
        <content type="html">&lt;p&gt;Sarebbe bello che tutti le seguissero (per ora enuncio solo quelle basilari):&lt;/p&gt;
&lt;p&gt;1. Scegliere nomi LEGGIBILI per gli identificatori&lt;/p&gt;
&lt;p&gt;2. Favorire la LEGGIBILITA' e non la BREVITA' (!)&lt;/p&gt;
&lt;p&gt;3. Usare solo caratteri alfanumerici (niente underscore)&lt;/p&gt;
&lt;p&gt;4. Non usare la notazione ungherese (ammessa la I per le interfacce)&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/manuel0081/aggbug/97577.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://blogs.ugidotnet.org/manuel0081/comments/97577.aspx</wfw:comment>
        <slash:comments>4</slash:comments>
        <wfw:commentRss>http://blogs.ugidotnet.org/manuel0081/comments/commentRss/97577.aspx</wfw:commentRss>
        <trackback:ping>http://blogs.ugidotnet.org/manuel0081/services/trackbacks/97577.aspx</trackback:ping>
    </entry>
</feed>