Rinnovo patente

Vediamo di mettere in codice anche questo evento della vita quotidiana che mi è capitato proprio oggi.

Come prima idea mi verrebbe da scrivere una classe Patente non statica, istanziarla:

Patente myPatente = new Patente();

poi per il rinnovo:

myPatente.Rinnova();

dove il metodo non fa altro che aggiornare una proprietà pubblica Anni o privata _anni:

public void Rinnova()
{
     _anni += 10;
}

Questo è sbagliato per vari motivi:

1. La proprietà privata ha un nome troppo generico (cosa indicano questi anni?);

2. La nomenclatura più appropriata sarebbe Durata e non Anni;

3. Bisognerebbe aggiornarla ogni anno e per il momento non ci interessa. Ci interessa conoscere la validità non per quanti anni è ancora valida.

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:

public void Rinnova()
{
   _dataDiScadenza.AddYears(10);
}

Questo codice va già meglio. Leggendo però il funzionamento di rinnovo di una patente, c'è un altro errore. Cambio il codice:

public void Rinnova(DateTime dataRinnovo)
{
   _dataUltimoRinnovo = dataRinnovo;
}

E si nota subita che non occorre un metodo ma basta utilizzare il set della proprietà. Quindi semplicemente nel codice (non nella classe):

myPatente.DataUltimoRinnovo = Convert.ToDateTime(txtDataRinnovo.Text);

Soprassediamo sul Convert e sui controlli da effettuare dato che non è l'intento di questo post.

Nella classe Patente avremo invece la proprietà

public DateTime DataScadenza
{
   get {return _dataUltimoRinnovo.AddYears(10);}
}

Anche qui non mi soffermo sul giorno effettivo di scadenza. In questo caso è importante aggiungere (correggetelo con il commento appropriato con tre ///):

// Indica la data di scadenza della patente calcolata come data del rinnovo incrementata di 10 anni.

public DateTime DataScadenza

{

   get {return _dataUltimoRinnovo.AddYears(10);}

}

 

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".

[continua]

 

Tutto il codice di questo articolo è scritto di getto; mi scuso per eventuali errori.


Technorati tags:

Print | posted @ giovedì 7 gennaio 2010 20:26

Comments on this entry:

Gravatar # re: Rinnovo patente
by Antonello at 07/01/2010 22:51

che genialata...!
Gravatar # re: Rinnovo patente
by Emanuele Prato at 09/01/2010 14:31

Non ho capito i vostri commenti... Provavo a spiegare come ragionare per scrivere il codice (sembra ovvio ma non lo è).
Speravo che qualcuno criticasse quello che ho scritto in maniera costruttiva...
Comments have been closed on this topic.