Architectural Patterns
Enterprise Library for NET Framework 2.0:
Giuseppe Dimauro
Microsoft MSDN Regional Director, Italy
[email protected]
www.dotnet2themax.it/blog
Microsoft Architect Webcast:
la nuova serie di Webcast per gli Architetti Applicativi
www.microsoft.com/italy/msdn/architetti/webcast
 Un programma dedicato
 19 appuntamenti fino a giugno
 Formazione specifica sulla progettazione sw e sui nuovi
prodotti e tecnologie analizzati dal punto di vista architetturale
 Tutta la comodità e immediatezza del webcast, con la
possibilità di rivedere le sessioni in streaming sul Web
Calendario dei prossimi Architect Webcast





Febbraio
•
14/2: Pattern architetturali per la realizzazione di applicazioni e servizi - Parte II
•
21/2: Introduzione alla metodologia agile MSF 4.0 con Visual Studio 2005 Team System
•
28/2: Progettare il Web Testing nel mondo Enterprise con Visual Studio 2005 Team Test
Marzo
•
07/3: BizTalk Server 2006: uno strumento per tutta l'azienda
•
14/3: BizTalk Server 2006: mille e uno usi di uno strumento versatile
•
21/3: BizTalk Server 2006 e lo sviluppo di applicazioni orientate ai servizi
•
28/3: WinFX: Windows Workflow Foundation - Parte I
Aprile
•
04/4: WinFX: Windows Workflow Foundation - Parte II
•
11/4: Realizzare servizi distribuiti con Windows Communication Foundation - Parte I
•
19/4: Realizzare servizi distribuiti con Windows Communication Foundation - Parte II
•
27/4: Architettura SOA. Perché non se ne può fare a meno?
Maggio
•
09/5: Le applicazioni client negli scenari d'integrazione - Parte I
•
16/5: Le applicazioni client negli scenari d'integrazione - Parte II
•
23/5: Interoperabilità e migrazione tra .NET e COM
Giugno
•
06/6: Smart Client. Unire il meglio di idee e tecnologie diverse
•
13/6: Il dato al centro dell'informazione aziendale. Come gestirlo
•
20/6: Snellire i processi aziendali gestendo il flusso di informazioni con Office
•
27/6: Smart Document: la nuova faccia del documento
Visual Studio 2005:
scegli il prodotto più giusto per te
www.microsoft.it/msdn/vs2005/
• Visual Studio 2005 Team Edition
Visual Studio Team Edition (for Architects, Developers o Testers) con MSDN Premium
Visual Studio Team Suite con MSDN Premium
• Strumenti professionali
Visual Studio 2005 Professional
Visual Studio 2005 Professional con MSDN Professional
Visual Studio 2005 Professional con MSDN Premium
Visual Studio 2005 Tools for Microsoft Office System
• Strumenti di base
Visual Studio 2005 Standard
Visual Studio 2005 Express Edition
• Altri strumenti
Visual SourceSafe 2005
VisualFox Pro 9.0
Licenze individuali:
1 sviluppatore = 1 licenza
Dove acquistare:
www.microsoft.it/msdn/rivenditori/
Per informazioni:
[email protected]
Architectural Patterns
Enterprise Library for NET Framework 2.0:
Giuseppe Dimauro
 15 anni nel settore
 Da 5 anni MS RD per l’Italia
 VBForum ’95, MSDN Conference,
Dev Days, WPC ecc.
 Cofondatore di Code Architects srl
 Coautore con Francesco Balena di:
• Practical Guidelines and Best Practices for Microsoft Visual Basic
and Visual C# Developers (MSPRESS)
 Excellence award winner
• http://www.stc-psc.org/stc-psc.org-asp/competitionwinnersexcellence.asp
Per tutti quelli che si fossero sintonizzati ora:
 Gli Application Blocks di Patterns & Practices sono soluzioni software
disponibili gratuitamente in in codice sorgente estensibile e
riutilizzabile. Forniscono delle vere e proprie linee guida per
l’implementazione di applicazioni di classe Enterprise affrontando
problematiche molto ricorrenti (pattern)
 Fornisce, essenzialmente, sette blocchi applicativi in questo momento:
• Caching, Configuration, Cryptography, Data Access, Exception Handling,
Logging & Instrumentation, Security
• Particolare attenzione rivolta alla consistenza, estensibilita’, facilita’ d’uso
e integrazione
• Originariamente progettato per .NET Framework 1.1. Primo rilascio a
gennaio 2005, aggiornato giugno 2005
Ecosistema della Enterprise Library
Customer Y library
Partner X library
p&p
Enterprise Library
Customer Z library
p&p blocks
Partner blocks
Customer blocks
Block Specification
Community blocks
Enterprise Library
Enterprise Library e’ …
Enterprise Library non e’…
Una libreria di macroblocchi
applicativi (Application blocks) che
affrontano e risolvono
problematiche comuni
Parte integrante del .NET
Framework
Un insieme di classi “helper”
riutilizzabili
Guide architeturali fisicamente
incapsulate in classi applicative
disponibile in codice sorgente
estendibile
Free e scaricabile
Un framework applicativo che
impone uno stile architetturale.
(Traete il meglio di cio’ che vi viene
proposto)
A Microsoft product with support,
compatibility and localization
For sale
Enterprise Library per .NET Framework 2.0
 E’ una major release della Enterprise Library
 Riprogettata per Microsoft® .NET Framework 2.0
• Sfrutta molte delle nuove potenzialita’ “chiave” di .NET 2.0
• Alcune caratteristiche della library 1.x sono state “deprecate”
 Gli scenari applicativi e le feature restano invariate
• L’API pubblica (Application Programming Interface) non e’ identica,
presenta modifiche minori
• …ma sono molte le migliorie che si celano sotto il coperchio!
Le modifiche importanti rispetto alla V 1.x
 La configurazione si basa su System.Configuration
• Il Configuration Application Block non esiste piu’
• Blocchi piu’ semplici da utilizzare senza file di configurazione
 Instrumentation e’ configurabile e disabilitato di default
 Logging Application Block e’ stato potenziato
• In termini di flessibilita’ e performance
 Data Access Application Block semplificato e potenziato
• Utilizzabile con OLE-DB, ODBC o qualsiasi provider managed
 Security Application Block e’ stato ridotto tantissimo
• Molte feature Security Application Block sono state deprecate a
favore dei meccanismi nativi di .NET 2.0 per la gestione delle
Membership e dei Profile
Enterprise Library for .NET Framework 2.0
Data
Access
Caching
Logging
Core
Plug-in
Cryptography
Config
Helpers
& Design
Instrumentation
Object
Builder
Exception
Handling
Security
Block Dependency
Optional Provider
Dependency
Enterprise Library for .NET Framework 2.0
Data
Access
Caching
Logging
Core
Plug-in
Cryptography
Config
Helpers
& Design
Instrumentation
Object
Builder
Exception
Handling
Security
Block Dependency
Optional Provider
Dependency
Il Core
 Configurazione
 Gestione della configurazione e Tool
 Instrumentation
 Object Builder e Factories
Configurazione
 Tutti gli Enterprise Library block sono configurabili
• Governare il lavoro dei “blocchi” nelle proprie applicazioni
• Specificare quali plug-in effettivamente utilizzare
 Comunque la nuova architettura e’ piu’ semplice da
utilizzare con o senza file di configurazione
• Oggetti di Factory istanziano oggetti partendo dalle informazioni
rilocate nei file di configurazione
• Gli oggetti possono essere istanziati con dati primitivi
Configurazione
 La configurazione si basa ora su System.Configuration
• La configurazione e’ in app.config o web.config di default
• Supporta letture/scritture di oggetti complessi
• Supporta protezione dati
 “Sorgenti di configurazione” alternative possono essere
utilizzate
• Un esempio di “SQL Configuration Source” e’ inclusa
 Assembly comuni contengono classi helper
• Il Configuration Application Block non esiste piu’ …
• Guide di migrazione verso System.Configuration incluse
Configuration Design & Tooling
 I tool di configurazione eliminano la necessita di editare le
informazioni XML nei file di configurazione
• Aggiungere velocemente info di default per uno specifico block
• Proprieta’ e provider tipizzati
• Validazione della configurazione prima del salvataggio
 Non ci sono grandi cambiamenti funzionali nel tool di
configurazione rispetto alla versione precedente
 Il tool puo’ essere riutilizzato per le proprie applicazioni ed
estensioni per offrire una interfaccia uniforme per
operazioni amministrative di questo tipo
System.Configuration in .NET 2.0
 Molto piu’ potente delle classi per .NET Framework 1.x
• Supporta la lettura e scrittura di interi grafi di oggetti
• Serializzazione/deserializzazione automatica tra classi di
configurazione e XML usando oggetti ConfigurationSection e
ConfigurationElement
 Alcune feature della Enterprise Library 1.x non sono
supportate direttamente
• Informazioni di configurazione in file diversi da XML
• Monitoring esterno delle variazioni ai file di configurazione
Configuration Runtime
 La Enterprise Library per .NET Framework 2.0 usa
System.Configuration, ma mette a disposizione classi
helper addizionali per un maggior numero di feature
• Tutti i block leggono informazioni di configurazione dall’apposita
sezione di file web.config/app.config
• Tutte le feature avanzate come la cifratura o uso di file esterni
sono supportate
 Le classi helper del Configuration Runtime sono presenti
nei Common assembly
• Utilizzate ampiamente da tutti i Block della Enterprise Library
• Per situazioni particolari possiamo pensare di usare direttamente
queste classi per esigenze similari
Sorgenti di configurazione
app.config
/ web.config
Application Blocks
or Custom Code
Default
ConfigurationSource
=…
IConfigurationSource
SystemConfiguration
Source
FileConfiguration
Source
SqlConfiguration
Source
System.Configuration
File Watcher
app.config
/ web.config
foo.config
File Watcher
Sorgenti di configurazione
 Attraverso l’uso di un contratto software e’ possibile
astrarre le componenti di lettura e scrittura di informazioni
di configurazione
 Due implementazioni incluse nel core
• SystemConfigurationSource ripiega su System.Configuration per
la lettura e la scrittura da file di configurazione (aggiunge file
watcher)
• FileConfigurationSource ripiega su System.Configuration per
leggere da file arbitrari
 SqlConfigurationSource e’ incluso come esempio
• Necessita’ che le sezioni siano derivata da
SerializableConfigurationSection
Scegliere una sorgente di configurazione
 Esistono piu’ di una maniera per scegliere la sorgente di
configurazione con Enterprise Platform
 Usando gli “access blocks” con façade statiche (Es.
DatabaseFactory, Logger), si usa la ConfigurationSource
di default:
• Modificando, definendo nel file di configurazione di default
(default.config) la sezione ConfigurationSources, si puo’
specificare il particolare tipo di sorgente da utilizzare
• In assenza di questa sezione, SystemConfigurationSource e’ la
sezione presa in considerazione dall’Application Block
Esempi di sorgenti di configurazione
<enterpriseLibrary.ConfigurationSource selectedSource="fileSource">
<sources>
<add name="fileSource"
type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource,
Microsoft.Practices.EnterpriseLibrary.Common" filePath="test.config"/>
<add name="systemSource"
type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource,
Microsoft.Practices.EnterpriseLibrary.Common"/>
</sources>
</enterpriseLibrary.ConfigurationSource>
// Use default source specified in the app.config / web.config file
Database db1 = DatabaseFactory.CreateDatabase(“Sales”);
// Use the specified source – you don’t need an app.config / web.config file
FileConfigurationSource fileSource = new FileConfigurationSource(“tom.config”);
DatabaseProviderFactory factory = new DatabaseProviderFactory(fileSource);
Database db2 = factory.Create(“Sales”);
Change Notifications
 IConfigurationSource supporta il monitoraggio delle
modifiche ai dati di configurazione
• AddSectionHandler(string sectionName,
ConfigurationChangedEventHandler handler)
• RemoveSectionHandler(string sectionName,
ConfigurationChangedEventHandler handler)
 Da codice e’ possibile sottoscrivere modifiche e
partecipare al broadcast degli eventi
 Attualmente nella Enterprise Library, soltanto il Logging
Application Block si registra per la ricezione di notifiche
di modifica
Instrumentation
 Tutti i block includono feature di instrumentation per
automatizzare fasi di sviluppo, test e operation
• Eventi per Event Log
• Performance Counters
• Eventi WMI (Microsoft® Windows® Management Instrumentation)
 Tutte le feature di instrumentation sono disabilitate di
default. Ogni tipo particolare di instrumentation puo’
essere abilitato utilizzando il tool di configurazione
 Installare instrumentation richiede diritti amministrativi e
puo’ essere utilizzata da installutil.exe
 Codice di instrumentation incapsulato in comuni assembly
puo’ essere riutilizzato nelle proprie applicazioni
Abilitazione della Instrumentation
 Esecuzione delle classi installer per creare gli artifacts di
instrumentation
• Lanciare installservices.bat (con account amministrativo), oppure
• Lanciare installutil.exe su ogni assembly della Enterprise Library
(utilizzando un account amministrativo), oppure
• Creare un proprio installers/MSI che fa questo lavoro
 Configurare instrumentation per la propria applicazione
usando il tool amministrativo
Instrumentation - Architettura
 Architettura Event-driven
Event
Log
Application or Block
calls
Instrumentation
Provider
Class(es)
Event
Instrumentation
Listener
Class(es)
Wires up
ObjectBuilder
Perf
Counters
WMI
Instrumentation
Configuration
Settings
Instrumentation - Attributi
 E’ pilotata attraverso l’uso di attributi:
• [InstrumentationListener]
Applicato ad un tipo di un blocco o dell’applicazione
Specifica quale listenere utilizzare per gli eventi di instrumentation
• [InstrumentationProvider]
Definisce un evento block-wide o application-wide
Specifica il nome dell’evento da sollevare
• [InstrumentationConsumer]
Si usa su un metodo associato all’instrumentation listener
Il metodo contiene la logica di instrumentation e il nome che deve combaciare con le
informazioni fornite nella dichiarazione dell’attributo InstrumentationProvider
Instrumentation - Esempio
public class Database : IInstrumentationEventProvider {
DbConnection OpenConnection() {
// Do stuff
instrumentationProvider.FireConnectionOpenedEvent();
}
public object GetInstrumentationEventProvider() {
return instrumentationProvider;
}
}
[InstrumentationListener(
typeof(DataInstrumentationListener),
typeof(DataInstrumentationListenerBinder)
)]
public class
DataInstrumentationProvider {
[InstrumentationProvider("ConnectionOpene
d")]
public event EventHandler<EventArgs>
connectionOpened;
public void FireConnectionOpenedEvent()
{
connectionOpened(this, new
EventArgs());
}
internal class
DataInstrumentationListener :
InstrumentationListener {
public
DataInstrumentationListener(string
instanceName, bool perfCountersEnabled,
bool eventLogEnabled, bool wmiEnabled) :
base(perf…, event…, wmi…) {}
[InstrumentationConsumer(
“ConnectionOpened")]
public void ConnectionOpened(object
sender, EventArgs e) {
if (PerformanceCountersEnabled)
connectionOpenedCounter.Increment();
}
Instrumentation – attributi di installazione
 Eseguendo installutil.exe, una classe con attributi di
instrumentation installa automaticamente tutte le risorse di
event log, schemi WMI e performance counter
 La Enterprise Library fornisce un ReflectionInstaller che
usa reflection per ricercare le classi interessate. Usa degli
attributi per velocizzare e semplificare l’operazione:
• [HasInstallableResources]
Ci sono risorse per Instrumentation
• [PerformanceCountersDefinition]
Definisce i contatori da utilizzare
• [EventLogDefinition]
Definisce le informazioni di event log
Object Builder
 Nuovo sottosistema condiviso tra EntLib e Compsite UI
Application Block
 Utilizzato per istanziare oggetti all’interno degli application
block
• Invocando il custom factory preposto allo scopo utilizzando meta
informazioni rilocate nel file di configurazione
• Configurare instrumentazione per i block
 Puo’ essere utilizzato per le proprie applicazioni
 Non va “imparato” per usare la Enterprise Library
Factories
Application Block
User
Code
Static Factory
or façade
Core
Configuration
Source
Instance
Provider Factory
Custom
Factory
Block Objects
Enterprise Library
Factory
Object Builder
Strategies
Facades e Factory statiche
 Rappresenta il modo piu’ agevole e semplice per utilizzare
I blcchi
 La configurazione viene ricavata dal sorgente di
configurazione di default
 Instrumentation viene attivata/coinvolta automaticamente
(ma andrebbe disabilitata)
 E’ di fatto, una chiamata ad un metodo di factory dietro le
quinte
 Esempi:
• Dim db As Database = DatabaseFactory.CreateDatabase(“Sales”)
• Logger.Write(“My message”, “My Category”)
Instance Provider Factories
 Maggiore controllo su cio’ che viene creato
 Possibilita’ di scegliere il proprio sorgente di
configurazione
 Instrumentation viene attivata/coinvolta automaticamente
(ma andrebbe disabilitata)
 Esempi:
• Dim factory As New DatabaseProviderFactory(configSource)
Dim db As Database = factory.Create(“Sales”)
• Dim factory As New LogWriterFactory(configSource)
Dim writer As LogWriter = factory.Create()
Creare oggetti direttamente
 Utilizzo del costruttore di oggetti direttamente
 I sorgenti di configurazione non vengono interpellati
 L’Object Builder non e’ coinvolto
 L’instrumentation non e’ automaticamente coinvolta ma
puo’ essere aggiunta “manualmente”
 Esempio:
• Dim db As SqlDatabase = New
SqlDatabase("server=(local)\SQLEXPRESS;database=EntLibQuic
kStarts;Integrated Security=true")
Enterprise Library per .NET Framework 2.0
Data
Access
Caching
Logging
Core
Plug-in
Cryptography
Config
Helpers
& Design
Instrumentation
Object
Builder
Exception
Handling
Security
Block Dependency
Optional Provider
Dependency
Exception Handling
 Obiettivi:
• Gestione delle eccezioni consistente in tutta l’applicazione
• Implementazione di un modo di gestire le eccezioni da manuale di
best practice:
Evitare di pubblicare “inavvertitamente” informazioni sensibili agli utenti
finali con la segnalazione di errori
Gestire le eccezioni attravers un contesto/wrapper opportunamente
specializzato per la particolare situazione/eccezione
• Semplifcazione del codice da scrivere per aggiungere
all’applicazione feature per la gestione delle eccezioni
Exception Handling Application Block

Il meccanismo e’ stato semplificato il piu’possibile per indirizzare
problematiche di questo tipo dalla propria applicazione

Definire policy di eccezione “Exception Policies” che lega una eccezione ad
una particolare azione/funzione applicativa

•
Exceptions di tipo ApplicationException andrebbero tracciate (logging)
•
Eccezioni di tipo SqlClientException andrebbero intercettate (catch) e incapsulate
(wrapped) in una eccezione di tipo DataLayerException e risollevata (re-thrown)
•
Eccezioni di tipo SecurityException andrebbero intercettate e sostituite con una
eccezione di tipo AccessDeniedException da risollevare (re-throw)
Le azioni associate possono essere le seguenti
•
Logging
•
Incapsulamento di una eccezione in un’altra (rewrapping)
•
Rimpiazzo di una eccezione con un’altra (replace)
•
Creazione di azioni custom…
Exception Handling - Esempio
Try
' codice contenente l’errore che provoca eccezione
Catch Ex As Exception
If ExceptionPolicy.HandleException(ex, “DataLayer”) _
Then Throw
End Try
Enterprise Library per .NET Framework 2.0
Data
Access
Caching
Logging
Core
Plug-in
Cryptography
Config
Helpers
& Design
Instrumentation
Object
Builder
Exception
Handling
Security
Block Dependency
Optional Provider
Dependency
Logging, obiettivi
 Log di attivita’ di business e operation verso varie destinazioni (DB,file
ecc.) configurabili esternamente attraverso semplice file di
configurazione
 Log di tipo tracing e’ importante per supportare attivita’ di debug in
produzione
 Auditing per rendere piu’ efficace l’implementazione della security
 Gestione della destinazione, veicolazione e formattazione dei
messaggi di eccezione
• Uso di filtri applicabili alla pipeline dei messaggi
 E’ indispensabile poter persistere messaggi di log su una vasta
varieta’ di dispositivi di memorizzazione (DB, file, log di eventi ecc..)
Logging Application Block
 Modello di log degli eventi semplificato
• Tipizzato, schema estendibile
 Basato su System.Diagnostics
 Basato sulla configurazione – e’ possibile decidere cosa
includere o escludere a runtime
 E’ possibile utilizzare oggetti compatibili con il
meccanismo di .NET basato su TraceListener:
• EventLog, Database, Text File, MSMQ, E-mail, WMI, … custom
 Classi tracer permettono di indirizzare in maniera specifica
eventi incapsulati
Novita’ nella release
 Basato su feature della namespace System.Diagnostics
come TraceListener, TraceSource e
CorrelationManager
• Semplifica il codice di EntLib, abilita ad una migliore integrazione
con le funzionalita’ core di System.Diagnostics
 Lo stesso LogEntry puo’ essere riutilizzato in molte
categorie
• Maggiore flessibilita’ e controllo del routing degli eventi/
abilitazione/disabilitazione
 Filtri “pluggable” ed estendibili
• Possono essere interrogati tramite apposita API per evitare costosi
messaggi di log
Esempi di log
Dim log As LogEntry = New LogEntry
log.Message = “Your message here…”
log.Priority = 1
log.EventId = 100
log.Categories.Add("UI")
log.Categories.Add("Debug")
Logger.Write(log)
// O se preferite in una sola riga ...
Customer cust = GetCustomer(123);
// Log di una istanza customer – cust.ToString() effettua il dump dell’istanza
Logger.Write(cust, category, priority);
Enterprise Library for .NET Framework 2.0
Data
Access
Caching
Logging
Core
Plug-in
Cryptography
Config
Helpers
& Design
Instrumentation
Object
Builder
Exception
Handling
Security
Block Dependency
Optional Provider
Dependency
Accesso ai dati – nuove esigenze
 Semplice ed efficiente modo per operare con i database
piu’ comuni
 Trasparenza (astrazione) durante lo sviluppo per molteplici
tipologie di database
 Modi per astrarre istanze logiche di database rispetto ad
implementazioni concrete/fisiche di istanze di database
 Modo semplice per validare e configurare informazioni per
database attraverso le impostazioni (configuration
settings)
Data Access Application Block
 Semplifica l’accesso alle API utilizzate piu’ frequentemente
di ADO.NET attraverso l’uso di pattern che inglobano
metodologie di best-practice
 Aumentata consistenza
• Con le dovute accortezze del caso e’ possibile scrivere codice
cross-database
 Maggiore facilita’ d’uso
• Invocazione di una SP con una sola riga
• Gestione del “lifetime” delle connessioni al database
• Lavorare con stringhe di connessione soft-coded in file di
configurazione o specificate nel codice
Data Access - Esempi
Public Function GetProductsInCategory(ByRef Category As Integer) As DataSet
' Crea un oggetto di accesso al Database utilizzando un nome logico
' Questa informazione e’ mappata all’interno del file di configurazione
Dim db As Database = DatabaseFactory.CreateDatabase("Sales")
' Invocazione di una stored procedure con una sola riga!
return db.ExecuteDataSet("GetProductsByCategory", Category)
// Nota: connessione chiusa automaticamente da ExecuteDataSet
End Function
public Dataset GetProductsInCategory(string connectionString, int category)
{
// crea l’oggetto per Database direttamente dalla connectionstring
SqlDatabase db = new SqlDatabase(connectionString);
// Invocazione di una stored procedure con una sola riga!
return db.ExecuteDataSet("GetProductsByCategory", category);
// Nota: connessione chiusa automaticamente da ExecuteDataSet
}
Nuovo in questa release
 Utilizzo con o senza configurazione
• Sfrutta la sezione <connectionStrings> di .NET 2.0
• Oppure, in alternativa, una propria connection string fornita
 API semplificata
• Usa il comando DbCommand di ADO.NET anzicche’
DBCommandWrapper
 Con provider ADO.NET 2.0 managed
• La classe GenericDatabase e’ compatibile con qualsiasi provider, incluso
OLE-DB e ODBC (alcune funzionalita’ avanzate come il discovery dei
parametri non sono disponibili)
• Utilizzare classi specializzate per db specifici per sfruttare tutta la API del
particolare DB senza rinunciare al “plumbing” della classe
GenericDatabase ed eventuali evoluzioni
Enterprise Library per .NET Framework 2.0
Data
Access
Caching
Logging
Core
Plug-in
Cryptography
Config
Helpers
& Design
Instrumentation
Object
Builder
Exception
Handling
Security
Block Dependency
Optional Provider
Dependency
Scenari di Caching
 Supponiamo di creare una applicazione smart client che
usa informazioni parcheggiate in locale per operazioni
offline
 Stiamo sviluppando una applicazione che deve usare dati
che “sopravvivono” al restart della stessa applicazione
 Nota: la cache di ASP.NET (System.Web.Caching) puo’
essere utilizzata in molteplici tipologie di applicazioni e
rappresenta un’ottima scelta per applicazioni che non
devono persistere informazioni di cache nel tempo
Caching Application Block
 Mette a disposizione una modalita’ di cache flessibile ed estensibile
che puo’ essere utilizzata in molti layer applicativi
 Supporta tecnologie di storage basati su database, isolated storage
ecc. permettendo la rilettura delle informazioni di cache anche al
riavvio delle applicazioni
 Facile da usare
 Semplice da configurare, usando il tool di configurazione della
Enterprise Library (Enterprise Library Configuration Tool)
 E’ Thread-safe
• Assicura che lo state della cache in-memory e di backup persistente
(disco, db, isol. Storage) venga acceduto con tecniche di sincronizzazione
Enterprise Library per .NET Framework 2.0
Data
Access
Caching
Logging
Core
Plug-in
Cryptography
Config
Helpers
& Design
Instrumentation
Object
Builder
Exception
Handling
Security
Block Dependency
Optional Provider
Dependency
Scenari di crittografia
 Abbiamo bisogno di cifrare dati usando chiavi simmetriche
prima di salvare I dati in un database e decriptare al
momento della lettura
 Abbiamo bisogno di cifrare informazioni (senza usare
chiavi) sulla medesima macchina
 Abbiamo la necessita’ di ricavare un hash da una
password da persistere in un database e confrontare tale
hash con un valore di hash fornito da un utente senza
persistere l’intera password
Cryptography Application Block
 Rende le proprie applicazioni piu’ sicure
• Con un approccio semplificato permette di realizzare scenari di
crittografazione
 Maggiore semplicita’
• Permette di operare sia su stringhe che su byte (stream)
CreateHash
CompareHash
EncryptSymmetric
DecryptSymmetric
 Maggiore integrazione
• Supporta tutti gli algoritmi di cifratura “out of the box”, o i propri custom
• Supporta le DPAPI per cifratura “keyless” sulla stessa macchina (single
machine)
• Algoritmi e chiavi possono essere gestite attraverso il solito tool di
configurazione
Enterprise Library for .NET Framework 2.0
Data
Access
Caching
Logging
Core
Plug-in
Cryptography
Config
Helpers
& Design
Instrumentation
Object
Builder
Exception
Handling
Security
Block Dependency
Optional Provider
Dependency
Scenari di sicurezza
 Autorizzazione degli utenti
• Utilizzando uno o piu’ meccanismi di sicurezza
 Abbiamo bisogno di fare cache di informazioni di
autenticazione o autorizzazione per la durata di una
sessione di logon
 Nota: le versioni precedenti della Enterprise Library
Security Application Block supportava autenticazione,
profili e ruoli. Queste feature vengono ora supportate
attraverso le classi di Membership e Profile e pertanto
sono state rimosse, come implementazione,
dall’Application Block
Security Application Block + ASP.NET
Security Application Block
 Incapsula attivita’ di
sicurezza comuni
Authorization
Rule
Provider
Authorization
Factory
 Deve rappresentare il modo
comune per esigenze di
sicurezza
IAuthorization
Provider
AzMan
Authorization
Provider
Security
Cache
Factory
Client
Code
ISecurity
Cache
Provider
ASP.NET
Membership
Profile
Membership
Provider
Profile
Provider
Caching
Store
Provider
ActiveDirectory
Membership
Provider
Sql
Membership
Provider
Sql
Profile
Provider
 Riduce al minimo il codice
necessario per la sicurezza
Caching
Application
Block
 Incapsula tecniche di best
practice di prim’ordine per
la sicurezza applicativa
Migrazione da versioni precedenti
 Ehem:
• Questa release NON e’ al 100% compatibile con la precedente release di
Enterprise Library
• Il formato dei file di configurazione e’ cambiato e tutte le configurazioni
vanno rifatte con l’apposito tool
 Le modifiche alla API sono poche e l’upgrade e’ veloce e semplice
 Eccezioni:
• Non esiste piu’ il Configuration Application Block  si usa
System.Configuration
• Provider Authentication, Role e Profile nel Security Application Block 
rimappano sui rispettivi provider di ASP.NET
• La guida di migrazione e’ inclusa nei documenti e negli esempi
Risorse
 Enterprise Library :
• http://msdn.microsoft.com/practices
 Iscrivetevi alla Enterprise Library Community:
• http://practices.gotdotnet.com/projects/entlib
 Blog del team di Enterprise Library:
• http://msdn.microsoft.com/practices/Comm/EntLibBlogs/
Scarica

Architectural Patterns Enterprise Library for NET