ASP.Net e Pattern Observer in Pratica – Seconda Parte

Nel post ASP.Net e Pattern Observer in Pratica – Prima Parte ho presentato un caso reale (anche se estremamente semplice) di uno di quei tantissimi casi in cui un cattivo (mancato) design possa portare sorprese inaspettate durante lo sviluppo di un’applicazione software.
Con molto dispiacere mi permetto di aggiungere, senza però voler aprire aspre ed infruttuose polemiche, che purtroppo queste situazioni non sono per nulla rare.
Tornando a noi…

Il Pattern Observer

Il pattern Observer, è un’elegante soluzione che permette di generare una relazione uno a molti tra diversi oggetti dove uno in particolare ha la possibilità di notificare agli altri un suo cambio di stato ed eventualmente i valori modificati senza violare le best practices per mantenere un corretto incapsulamento.

In sostanza il pattern segue il modello Publisher and Subscribe dove alcune entità chiamate sottoscrittori si registrano presso un pubblicatore che li informa ogni qualvolta ci siano delle nuove informazioni da notificare.

Di seguito vediamo il diagramma UML del pattern observer:

Design Pattern - Observer

Nel diagramma la classe Subject rappresenta il pubblicatore che espone pubblicamente i seguenti tre metodi

  • Attach (Utilizzato per registrare un sottoscrittore alle notifiche);
  • Detach (Utilizzato per la rimuovere la registrazione di un sottoscrittore alle notifiche);
  • Notify (Utilizzato per notificare ai sottoscrittori il cambio di stato).

Le classi Observer, Observer2 e Observer3 rappresentano invece tre implementazioni di sottoscrittori e espongono il metodo Update che sarà utilizzato all’interno di Notify del pubblicatore per aggiornarli relativamente al suo cambio di stato.

Ovviamente per far si che i sottoscrittori (classi Observer, Observer2, ecc..) possano ricevere le notifiche da parte del pubblicatore (classe subject) dovranno in qualche modo sottoscriversi alla notifica. Questo è possibile grazie all’evento “Attach(IObserver o);” esposto dal publicatore che accettando in ingresso un tipo IObserver da la possibilità di registrare un riferimento agli oggetti sottoscritti all’evento di notifica.

Di seguito vediamo un sequence diagram che dovrebbe chiarire un po’ le idee relativamente all’andamento della notifica.

Design Pattern - Observer sequence diagram

Nel prossimo post vedremo un’ implementazione di esempio del pattern Observer, d’altro canto il titolo del post promette un esempio pratico ma qualcuno potrebbe obbiettare che siamo già alla seconda parte e di pratica ne abbiamo fatta poca 😛
E’ vero ma un po’ di teoria iniziale per qualche lettore magari poteva risultare necessaria…

Advertisements

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...