Il Provider Model rappresenta una delle principali novità architetturali della versione 2.0 del .NET Framework. Nell'articolo sul Provider Model abbiamo visto i concetti generali che ne regolano il funzionamento e ne abbiamo capito le motivazioni. In questo articolo andiamo a valutare alcuni dei Provider di ASP.NET 2.0, elencandone le caratteristiche principali e gli aspetti peculiari da un punto di vista dell'architettura.
I Provider di ASP.NET 2.0 che vengono trattati in questo articolo sono sette (quelli che in linea di massima seguono il modello generale visto nella prima parte dell'articolo) e riguardano le principali API legate allo sviluppo web, tra cui alcune delle novità introdotte con la nuova versione del .NET Framework.
Prima di vedere le caratteristiche dei Provider, è bene richiamare alcuni concetti di natura generale. Nell'articolo sul Provider Model abbiamo visto che, applicando il pattern Provider, è possibile definire una serie di strategie di implementazione relative ad una particolare API. Specificando in modo dinamico il tipo concreto da caricare, diventa possibile attivare una di queste strategie (un Provider concreto) a runtime tramite un'operazione di Dependency Injection. Le impostazioni di caricamento vengono inserite nell'ambito del file di configurazione e vengono recuperate prima dell'attivazione dell'istanza del Provider. Il Provider Model si rivela pertanto un'idea architetturale estremamente efficace in termini di flessibilità ed estendibilità, permettendo la creazione di layer applicativi pluggabili e personalizzabili.
Nota: nei diagrammi riportati nell'articolo sono stati volutamente omessi alcuni membri delle classi per migliorare la leggibilità e focalizzare l'attenzione solo sugli aspetti in discussione.
System.Web.SiteMapProvider
In ASP.NET 2.0 la mappa di un sito viene espressa tramite la classe statica SiteMap contenuta nel namespace System.Web. La classe in questione contiene la rappresentazione in-memory della struttura di navigazione composta da una collezione gerarchica di nodi di tipo SiteMapNode a ciascuno dei quali corrisponde una pagina o una directory dell'applicazione. La classe SiteMap fornisce inoltre l'accesso in sola lettura alle informazioni relative alla mappa di navigazione contenute in una sorgente dati che solitamente è il file XML web.sitemap.
Il Provider predefinito per la classe SiteMap è la classe XmlSiteMapProvider, che a sua volta deriva dalla classe astratta StaticSiteMapProvider la cui classe base è la classe SiteMapProvider. La classe XmlSiteMapProvider rappresenta l'implementazione concreta del Provider che serve per recuperare le informazioni relative alla mappa contenute in un file con estensione .sitemap. La classe SiteMapProvider, anch'essa astratta, definisce il contratto che deve essere rispettato da ciascun Provider concreto definito per SiteMap. Derivando da questa classe è possibile definire un Provider custom utile per leggere la struttura del sito da una qualsiasi sorgente dati alternativa (per esempio, da un database oppure da un file in formato testuale di qualche tipo).
La classe SiteMap espone unicamente proprietà di tipo SiteMapNode (RootNode e CurrentNode) e non contiene alcuna informazione che possa contribuire a ricostruire la struttura gerarchica delle relazioni tra i diversi nodi. Questa responsabilità è lasciata al Provider che a tale scopo utilizza la collezione SiteMapNodeCollection.
La classe SiteMapProvider supporta il concetto di gerarchia dei Provider, dichiarando due proprietà di tipo SiteMapProvider denominate RootProvider e ParentProvider. Questo significa che un oggetto di tipo SiteMapProvider può essere figlio o padre di un altro Provider. Lo scopo è quello di mettere nelle condizioni i gruppi di sviluppo di diverse aree di un sito di gestire e implementare in modo autonomo le proprie mappe e i relativi Provider.
In relazione al modello visto nell'articolo sul Provider Model, la classe statica SiteMap funge da Manager, anche se non espone alcun metodo pubblico. La classe SiteMapProvider rappresenta il Provider astratto (AbstractProvider) da cui derivano tutti i Provider concreti (ConcreteProvider), di cui XmlSiteMapProvider è la versione predefinita inclusa direttamente nel .NET Framework.
Le informazioni relative al Provider da caricare sono contenute nella sezione <siteMap /> del file di configurazione. L'esempio riportato di seguito mostra come impostare il SiteMapProvider predefinito di tipo XmlSiteMapProvider.
<siteMap defaultProvider="MyXmlSiteMapProvider" enabled="true"> <providers> <add name="MyXmlSiteMapProvider" description="Recupera i dati da un file .sitemap" type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" siteMapFile="my.sitemap" /> </providers> </siteMap>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.