architectural patterns enterprise library for net framework 2.0: giuseppe dimauro microsoft msdn...
TRANSCRIPT
Architectural PatternsEnterprise Library for NET Framework 2.0:
Giuseppe Dimauro
Microsoft MSDN Regional Director, Italy
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 tewww.microsoft.it/msdn/vs2005/
• Visual Studio 2005 Team EditionVisual Studio Team Edition (for Architects, Developers o Testers) con MSDN Premium
Visual Studio Team Suite con MSDN Premium
• Strumenti professionaliVisual 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 baseVisual Studio 2005 Standard
Visual Studio 2005 Express Edition
• Altri strumentiVisual SourceSafe 2005
VisualFox Pro 9.0
Dove acquistare:
www.microsoft.it/msdn/rivenditori/
Licenze individuali: 1 sviluppatore = 1 licenza
Per informazioni:[email protected]
Architectural PatternsEnterprise 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
p&p Enterprise Library
Ecosistema della Enterprise Library
Partner blocks
Customer blocks
Community blocks
p&p blocks
Partner X library
Customer Y library
Customer Z library
Block Specification
Enterprise Library
Enterprise Library e’ …
Una libreria di macroblocchi applicativi (Application blocks) che affrontano e risolvono problematiche comuni
Un insieme di classi “helper” riutilizzabili
Guide architeturali fisicamente incapsulate in classi applicative disponibile in codice sorgente estendibile
Free e scaricabile
Enterprise Library non e’…
Parte integrante del .NET Framework
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
CachingCaching
SecuritySecurity
Data Data AccessAccess LoggingLogging
ExceptionExceptionHandlingHandling
Enterprise Library for .NET Framework 2.0
Plug-inConfigConfig
Helpers Helpers & Design& Design
Instrumen-Instrumen-tationtation
ObjectObjectBuilderBuilder
CryptographyCryptography
Core
Block DependencyOptional ProviderDependency
CachingCaching
SecuritySecurity
Data Data AccessAccess LoggingLogging
ExceptionExceptionHandlingHandling
Enterprise Library for .NET Framework 2.0
Plug-inConfigConfig
Helpers Helpers & Design& Design
Instrumen-Instrumen-tationtation
ObjectObjectBuilderBuilder
CryptographyCryptography
Core
Block DependencyOptional ProviderDependency
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
Application BlocksApplication Blocksor Custom Codeor Custom Code
IConfigurationSourceIConfigurationSource
SystemConfigurationSystemConfigurationSourceSource
FileConfigurationFileConfigurationSourceSource
SqlConfigurationSqlConfigurationSourceSource
app.config/ web.config
foo.config
app.config/ web.config
DefaultConfigurationSource
= …
System.ConfigurationSystem.Configuration
File WatcherFile 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
// 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”);
<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>
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
InstrumentationInstrumentationProviderProviderClass(es)Class(es)
InstrumentationInstrumentationListenerListenerClass(es)Class(es)
InstrumentationInstrumentationConfigurationConfiguration
SettingsSettings
WMIWMI
PerfPerfCountersCounters
EventEventLogLog
EventEvent
ObjectBuilderObjectBuilder
Wires upWires up
Application or BlockApplication or Blockcallscalls
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 public class Database : Database : IInstrumentationEventProviderIInstrumentationEventProvider { { DbConnection OpenConnection() { DbConnection OpenConnection() { // Do stuff// Do stuff instrumentationProvider.FireConnectionOpenedEvent();instrumentationProvider.FireConnectionOpenedEvent(); }} public object GetInstrumentationEventProvider() {public object GetInstrumentationEventProvider() { return instrumentationProvider; }return instrumentationProvider; }}}
[InstrumentationListener([InstrumentationListener( typeof(DataInsttypeof(DataInstrumentationListener), rumentationListener), typeof(DataInstrumentationListenerBinder)typeof(DataInstrumentationListenerBinder))])] public class public class DataInstrumentationProviderDataInstrumentationProvider { {
[InstrumentationProvider("ConnectionOpene[InstrumentationProvider("ConnectionOpened")]d")] public event public event EEventHandler<EventArgs> ventHandler<EventArgs> connectionOpened;connectionOpened;
public void FireConnectionOpenedEvent() public void FireConnectionOpenedEvent() {{ connectionOpened(this, new connectionOpened(this, new EventArgs());EventArgs());}}
internal class internal class DataInstrumentationListenerDataInstrumentationListener : : InstrumentationListenerInstrumentationListener { {
public public DataInstrumentationListener(string DataInstrumentationListener(string instanceName, bool perfCountersEnabled,instanceName, bool perfCountersEnabled,bool eventLogEnabled, bool wmiEnabled) :bool eventLogEnabled, bool wmiEnabled) : base(perf…, event…, wmi…) {}base(perf…, event…, wmi…) {}
[InstrumentationConsumer( “ConnectionOpe[InstrumentationConsumer( “ConnectionOpened")]ned")]public void ConnectionOpened(object public void ConnectionOpened(object sender, EventArgs e) {sender, EventArgs e) {if (PerformanceCountersEnabled)if (PerformanceCountersEnabled) connectionOpenedCounter.Increment();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
CoreCoreApplication BlockApplication Block
Factories
Static FactoryStatic Factoryor façadeor façade
Instance Instance Provider FactoryProvider Factory
Enterprise LibraryEnterprise Library FactoryFactory
CustomCustom FactoryFactory
Block ObjectsBlock Objects
Object BuilderObject Builder
StrategiesStrategies
UserUserCodeCode
ConfigurationConfigurationSourceSource
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=EntLibQuickStarts;Integrated Security=true")
CachingCaching
SecuritySecurity
Data Data AccessAccess LoggingLogging
ExceptionExceptionHandlingHandling
Enterprise Library per .NET Framework 2.0
Plug-inConfigConfig
Helpers Helpers & Design& Design
Instrumen-Instrumen-tationtation
ObjectObjectBuilderBuilder
CryptographyCryptography
Core
Block DependencyOptional ProviderDependency
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
CachingCaching
SecuritySecurity
Data Data AccessAccess LoggingLogging
ExceptionExceptionHandlingHandling
Enterprise Library per .NET Framework 2.0
Plug-inConfigConfig
Helpers Helpers & Design& Design
Instrumen-Instrumen-tationtation
ObjectObjectBuilderBuilder
CryptographyCryptography
Core
Block DependencyOptional ProviderDependency
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);
CachingCaching
SecuritySecurity
Data Data AccessAccess LoggingLogging
ExceptionExceptionHandlingHandling
Enterprise Library for .NET Framework 2.0
Plug-inConfigConfig
Helpers Helpers & Design& Design
Instrumen-Instrumen-tationtation
ObjectObjectBuilderBuilder
CryptographyCryptography
Core
Block DependencyOptional ProviderDependency
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 ExecuteDataSetEnd 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
CachingCaching
SecuritySecurity
Data Data AccessAccess LoggingLogging
ExceptionExceptionHandlingHandling
Enterprise Library per .NET Framework 2.0
Plug-inConfigConfig
Helpers Helpers & Design& Design
Instrumen-Instrumen-tationtation
ObjectObjectBuilderBuilder
CryptographyCryptography
Core
Block DependencyOptional ProviderDependency
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
CachingCaching
SecuritySecurity
Data Data AccessAccess LoggingLogging
ExceptionExceptionHandlingHandling
Enterprise Library per .NET Framework 2.0
Plug-inConfigConfig
Helpers Helpers & Design& Design
Instrumen-Instrumen-tationtation
ObjectObjectBuilderBuilder
CryptographyCryptography
Core
Block DependencyOptional ProviderDependency
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
CachingCaching
SecuritySecurity
Data Data AccessAccess LoggingLogging
ExceptionExceptionHandlingHandling
Enterprise Library for .NET Framework 2.0
Plug-inConfigConfig
Helpers Helpers & Design& Design
Instrumen-Instrumen-tationtation
ObjectObjectBuilderBuilder
CryptographyCryptography
Core
Block DependencyOptional ProviderDependency
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
ASP.NET
Security Application Block + ASP.NET
Incapsula attivita’ di sicurezza comuni
Deve rappresentare il modo comune per esigenze di sicurezza
Riduce al minimo il codice necessario per la sicurezza
Incapsula tecniche di best practice di prim’ordine per la sicurezza applicativa
ClientCode
Security Application Block
Membership
Profile
MembershipProvider
ProfileProvider
AuthorizationFactory
SecurityCache
Factory
IAuthorizationProvider
ISecurityCache
Provider
AuthorizationRule
Provider
CachingStore
Provider
AzManAuthorization
Provider
ActiveDirectoryMembership
Provider
SqlMembership
Provider
SqlProfile
Provider
CachingCachingApplicationApplication
BlockBlock
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/