1 / 61

Architectural Patterns Enterprise Library for NET Framework 2.0:

Architectural Patterns Enterprise Library for NET Framework 2.0: . Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com www.dotnet2themax.it/blog.

marrim
Download Presentation

Architectural Patterns Enterprise Library for NET Framework 2.0:

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Architectural PatternsEnterprise Library for NET Framework 2.0: Giuseppe Dimauro Microsoft MSDN Regional Director, Italy gdimauro@codearchitects.com www.dotnet2themax.it/blog

  2. Microsoft Architect Webcast: la nuova serie di Webcast per gli Architetti Applicativiwww.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

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

  4. Visual Studio 2005: scegli il prodotto più giusto per tewww.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:itamsdn@microsoft.com

  5. Architectural PatternsEnterprise Library for NET Framework 2.0:

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

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

  8. Customer Y library Partner X library p&p Enterprise Library Customer Z library Ecosistema della Enterprise Library p&p blocks Partner blocks Customer blocks Block Specification Community blocks

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

  10. 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!

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

  12. Plug-in Config Helpers & Design Instrumen-tation ObjectBuilder Enterprise Library for .NET Framework 2.0 Data Access Logging Caching Core Cryptography Exception Handling Security Optional ProviderDependency Block Dependency

  13. Enterprise Library for .NET Framework 2.0 Data Access Logging Caching Core Plug-in Config Helpers & Design Instrumen-tation Cryptography ObjectBuilder Exception Handling Security Optional ProviderDependency Block Dependency

  14. Il Core • Configurazione • Gestione della configurazione e Tool • Instrumentation • Object Builder e Factories

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

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

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

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

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

  20. Sorgenti di configurazione app.config / web.config Default ConfigurationSource = … Application Blocks or Custom Code IConfigurationSource SystemConfiguration Source FileConfiguration Source SqlConfiguration Source System.Configuration foo.config app.config / web.config File Watcher File Watcher

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

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

  23. 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.ConfigurationSourceselectedSource="fileSource"> <sources> <addname="fileSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common" filePath="test.config"/> <addname="systemSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common"/> </sources> </enterpriseLibrary.ConfigurationSource>

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

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

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

  27. Instrumentation - Architettura Event Log • Architettura Event-driven Application or Block calls Perf Counters Instrumentation Listener Class(es) Instrumentation Provider Class(es) Event WMI Wires up Instrumentation Configuration Settings ObjectBuilder

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

  29. 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("ConnectionOpened")] 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(); }

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

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

  32. Factories Application Block Core Static Factory or façade Configuration Source User Code Instance Provider Factory Enterprise Library Factory Object Builder Custom Factory Strategies Block Objects

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

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

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

  36. Plug-in Config Helpers & Design Instrumen-tation ObjectBuilder Enterprise Library per .NET Framework 2.0 Data Access Logging Caching Core Cryptography Exception Handling Security Optional ProviderDependency Block Dependency

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

  38. 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…

  39. Exception Handling - Esempio Try ' codice contenente l’errore che provoca eccezione Catch Ex As Exception If ExceptionPolicy.HandleException(ex, “DataLayer”) _ Then Throw End Try

  40. Plug-in Config Helpers & Design Instrumen-tation ObjectBuilder Enterprise Library per .NET Framework 2.0 Data Access Logging Caching Core Cryptography Exception Handling Security Optional ProviderDependency Block Dependency

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

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

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

  44. 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 dumpdell’istanza Logger.Write(cust, category, priority);

  45. Plug-in Config Helpers & Design Instrumen-tation ObjectBuilder Enterprise Library for .NET Framework 2.0 Data Access Logging Caching Core Cryptography Exception Handling Security Optional ProviderDependency Block Dependency

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

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

  48. 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 }

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

  50. Plug-in Config Helpers & Design Instrumen-tation ObjectBuilder Enterprise Library per .NET Framework 2.0 Data Access Logging Caching Core Cryptography Exception Handling Security Optional ProviderDependency Block Dependency

More Related