ASP.Net e Pattern Observer in Pratica – Prima Parte

Ieri mi è stata chiesta una piccola consulenza relativamente ad un bug presente su una pagina web sviluppata in ASP.Net Web Forms e vorrei condividere con voi sia lo scenario sia la soluzione implementata così da approfittare per parlare del Pattern Observer.

Il Requisito

Implementazione di una pagina di ricerca dove sono presenti alcuni web user controls tra i quali uno in particolare si occupa di raccogliere l’input dell’utente per effettuare una ricerca tramite la pressione di un pulsante apposito (presente sullo stesso user control), l’operazione di ricerca deve in qualche modo essere notificata agli altri user controls presenti sulla stessa pagina che utilizzando gli stessi valori inseriti nel primo controllo dovranno filtrare e renderizzare i dati di dettaglio.

La Soluzione originariamente implementata

La soluzione originariamente implementata, ovvero quella che generava bug, lavorava più o meno così:

  • Creazione di 3 user control
    • Ricerca.ascx
    • ListaDettagli.ascx
    • Dettaglio.ascx
  • L’utente inputa una serie di valori (tramite TextBox, CheckBox, ed altri controlli… presenti nel controllo Ricerca.ascx);
  • L’utente Clicca sul pulsante “Cerca” (sempre presente nel controllo Ricerca.ascx);
  • L’user control nel gestore di evento associato al click del bottone “cerca” istanzia un oggetto preposto con tutte le informazioni inserite dall’utente e lo memorizza in sessione;
  • Nell’evento Load degli altri user control viene letto l’oggetto in sessione e se questo non è null allora viene utilizzato come filtro.

Le problematiche riscontrate

Quello che il cliente lamenta è che la ricerca funziona a singhiozzi… ovvero:

  • La prima ricerca non funziona mai;
  • La seconda ricerca funziona se non vengono cambiati i dati inputati per la ricerca;
  • Le seguenti ricerche filtrano i dati dei dettagli con i dati inputati dall’utente per la ricerca precedente.

..ma come mai? ..e soprattutto sono solo questi i problemi effettivamente portati dalla soluzione implementata? ..oppure ce ne sono altri che l’utente (o addirittura il pogrammatore) non sta considerando? Inoltre qual’è il grado di portabilità e/o di estensione delle componenti software sviluppate?

La motivazione del problema ed una soluzione apparente

La motivazione del problema è molto semplice, nel ciclo di vita di una pagina ASP.Net  l’evento Postback viene scatenato dopo l’evento Load, quindi quando i controlli di dettaglio leggono il valore dalla sessione (nell’evento Load) lo leggono prima che l’user control Ricerca.ascx lo inserisca in sessione durante il Postback!

A questo punto, individuata l’origine del comportamento anomalo, potremmo essere portati a pensare che posticipare la lettura dei dati della sessione in un evento successivo al Postback (per esempio il PreRender) risolva il problema… bè diciamo che l’anomalia relativa alla ricerca effetivamente scompare ma questa è veramente una soluzione? ..oppure è quella che più comunemente  nel nostro campo viene definita come una pezza su un’implementazione poco controllabile?

Mi spiace dire che purtroppo siamo nel secondo caso…

..e allora cerchiamo di capire insieme come i design pattern possano aiutarci nell’implementare una soluzione più elegante ed affidabile, vediamo a cosa serve e come implementare il pattern observer.

Modificare la User Interface senza disorientare l’utente finale?

Studio della User InterfaceVi siete mai chiesti cos’è che fa la differenza nel rendere agevole, talvolta anche gradevole, l’utilizzo di un software agli utenti finali che ne fanno utlilizzo? ..considerando che scrivo questo bog principalmente per un pubblico di addetti ai lavori spero proprio che la vostra risposta si avvicini ad un chiaro e deciso SI!

Se così non fosse… haimè l’unica cosa che posso dirvi è: male… veramente molto MALE!

Lo studio e la cura della user experience è una di quelle attività fondamentali che possono fare di un piccolo mucchio di righe di codice (su via un po’ di ironia :P) un software di successo!

Questa mattina, come consueto ormai, mi sono diretto su un motore di ricerca (uno a caso!?!) ed ho notato che per l’ennesima volta qualcosa è cambiato…

Google, in questo caso ma come molti altri, ci coccola da svariati anni con piccole modifiche ed accorgimenti alla UX (piccole per modo di dire visto che nascondono interminabili e complesse attività di profilazione utente) atti a migliorare la navigabilità nel sempre crescente set di funzionalità che ci offre.

Questa mattina è stata la volta del menu di navigazione presente sulla sinistra della pagina dei risultati, che è scomparso in favore di una meno invadente barra orizzontale appena sotto l’area di ricerca

Google nuova interfaccia grafica per la ricerca

La cosa sulla quale vogli portare oggi l’attenzione è che queste modifiche, quando necessario, sono spesso organizzate in più step in modo da non disorientarci. Prima di spostare un elemento fondamentale, come può essere un menù di navigazione, dovrebbe essere corretto domandarsi quanto questa scelta possa impattare sulle abitudini dell’utente finale ed in caso di probabili conseguenze negative organizzare lo spostamento in più step.

In altri casi, quando magari la modifica è imminente e non si hanno i tempi o il budget per poter programmare questi step intermedi, una valida alternativa puo’ essere aggiungere un menu-guida interattivo (maestro incontrastato in questo campo è Facebook.com) che ci guidi passo passo nel comprendere dove e perché siano stati spostati o aggiunti ulteriori elementi interattivi.

Voi cosa ne pensate? ..ma soprattutto quanto ci pensate prima di stravolgere le vostre UI ogni qual volta sia necessario o richiesta l’introduzione di nuove funzionalità?

Intanto grazie Google per non farmi uscire di senno ogni giorno! 🙂

ITIL – IT Infrastructure Library

ITIL (IT Infrastructure Library) è un framework di best practice consigliate per garantire il miglioramento dei servizi e delle strutture coinvolte nei processi IT e che, a differenza di altri, non si presenta come un modello teorico ma pittosto come una raccolta di metodologie che hanno dimostrato “sul campo” di migliorare la qualità di tali servizi nonchè i mezzi necessari a supportarli nel tempo.

La prima versione del framework, al tempo non ancora conosciuta con questo nome, fu rilasciata verso la metà degli anni ’80 e nacque dalla richiesta dal Governo Britannico che, non considerando sufficientemente valido il livello qualitativo dei servizi IT erogati, incaricò la CCTA (Central Computer and Telecommunication Agency) oggi nota come Office of Government Commerce (OGC), per ottimizzare l’efficienza ed il costo delle risorse IT.

ITIL v1 è poi successivamente evoluto prima nella versione 2 (con la quale raggiunse l’approvazione dei più nel mondo IT) nei primi anni del 2000 e poi nella 3 nel 2007.

La v3 si basa su un approccio basato sull’intero Ciclo di Vita dei Servizi IT introducendo il concetto di Service Life Cycle differentemente dalla v2 strettamente focalizzata sui processi. Questa impostazione, porta il dipartimento IT a focalizzare la propria attenzione sul valore che i servizi portano al Business dell’azienda o in generale del committente.

I 5 Core Books sui quali è basata ITIL v3 sono sono suddivisi uno per ogni fase del ciclo di vita del servizio:

  • Service Strategy: ovvero la definizione della strategia IT rispetto al Business
  • Service Design: quindi la fase progettazione del servizio
  • Service Transition: erogazione del servizio
  • Service Operation: manutenzione e gestione del servizio
  • Continual Service Improvement: miglioramento continuo del servizio in tutte le fasi del ciclo di vita

Una cosa da tenere assolutamente in considerazione nell’utilizzo di ITIL è che lo stesso non è uno standard, ciò vuol dire che mantenere le linee guida proposte non vuol dire non poterle “adattare” alle proprie strutture organizzative.

Approfondimenti:
http://www.itil-italia.com/
http://it.wikipedia.org/wiki/ITIL
http://www.itsmfi.org/content/introductory-overview-itil-v3-pdf
http://www.isacaroma.it/pdf/080131/ITL-Renna-31.01.08.pdf