architectural patterns enterprise library for net framework 2.0: giuseppe dimauro microsoft msdn...

61
Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy [email protected] www.dotnet2themax.it/blog

Upload: abele-ferraro

Post on 01-May-2015

230 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

Architectural PatternsEnterprise Library for NET Framework 2.0:

Giuseppe Dimauro

Microsoft MSDN Regional Director, Italy

[email protected]

www.dotnet2themax.it/blog

Page 2: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 3: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 4: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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]

Page 5: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

Architectural PatternsEnterprise Library for NET Framework 2.0:

Page 6: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 7: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 8: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 9: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 10: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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!

Page 11: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 12: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 13: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 14: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

Il Core

Configurazione

Gestione della configurazione e Tool

Instrumentation

Object Builder e Factories

Page 15: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 16: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 17: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 18: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 19: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 20: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 21: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 22: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 23: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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>

Page 24: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 25: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 26: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 27: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 28: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 29: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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();}}

Page 30: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 31: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 32: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 33: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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”)

Page 34: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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()

Page 35: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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")

Page 36: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 37: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 38: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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…

Page 39: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

Exception Handling - Esempio

Try

' codice contenente l’errore che provoca eccezione

Catch Ex As Exception

If ExceptionPolicy.HandleException(ex, “DataLayer”) _

Then Throw

End Try

Page 40: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 41: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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..)

Page 42: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 43: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 44: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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);

Page 45: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 46: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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)

Page 47: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 48: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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}

Page 49: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 50: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 51: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 52: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 53: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 54: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 55: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 56: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 57: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 58: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 59: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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

Page 60: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com

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/

Page 61: Architectural Patterns Enterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com