Pattern and Practices & Application Blocks:
cosa sono e come si usano
Ing. Lorenzo Barbieri
MCT, MCSD.NET, MCDBA
2
Me.About()



Sono un Senior Trainer/Consultant in ObjectWay SpA, specializzato
in architetture Microsoft .NET, Windows, SQL Server.
Ho scritto articoli per ioProgrammo, Dev, Network News.
Ho scritto le guide su www.cramsession.com per i seguenti esami di
certificazione Microsoft:
 Visual Basic .NET, Visual C#, Visual C++, BizTalk Server, Commerce
Server, e altri


Sono specializzato sul Microsoft Solutions Framework, su cui ho
scritto alcuni articoli e mantengo una lista di tutte le risorse
disponibili.
Per contattarmi o per maggiori informazioni potete visitare il mio
BLOG:
www.geniodelmale.info
3
Agenda della giornata

Introduzione a Pattern & Practices

Application Blocks di base




DAAB 3.1
CMAB
EMAB
LAB

Enterprise Library

Blocchi avanzati
 UIP
 AUB

Reference Architectures
 “ShadowFax”
 FABRIQ
4
Introduzione a
Pattern & Practices
Microsoft Patterns & Practices: Visione

Sviluppo di applicazioni .NET distribuite

Utilizzo “estensivo” della piattaforma

Risultati!

Sviluppo, manutenzione e gestione “operativa”
FROM the field and FOR the field
6
Pattern & Practices
Patterns
Application
Blocks
Guides
7
Reference
Architectures
Dove possiamo trovarli?



8
Su Microsoft.com
 http://www.microsoft.com/practices/
In libreria
 http://www.amazon.com/practices/
Su GotDotNet
 http://workspaces.gotdotnet.com/
(cercare patterns & practices)
Application blocks

Librerie di codice .NET riutilizzabile
 C# e VB.NET
 Molto estensibile, modulare




9
Implementano i servizi architetturali di base
Sono stati sviluppati seguendo le best practice suggerite dalle guide
Completi di documentazione e samples (Quick Start)
Possono essere usati come “black box” o “white box”
Application blocks

Blocchi “base”:







10




Blocchi “avanzati”:






Authorization and Profile Application Block
Caching Application Block for .NET
Configuration Management Application Block for .NET
Data Access Application Block for .NET
Exception Management Application Block for .NET
Logging Application Block
Aggregation Application Block for .NET
Asynchronous Invocation Application Block for .NET
Smart Client Offline Application Block
Updater Application Block for .NET
User Interface Process Application Block for .NET
Vedremo in dettaglio quelli con la 


Alcuni
Application Block di base
Dove si posizionano i vari “blocchi”...
Schema preso dalla documentazione di Enterprise Library 1.0
12
Data Access Application Block

Questo blocco serve per semplificare la gestione degli accessi al
database.

E’ usato dagli altri blocchi quando devono accedere al DB.

Fino alla versione 2.0 supportava solo SQL Server.

La versione 3.x ha implementato un modello a provider multipli
basato su Abstract Factory, ed è scaricabile da
http://www.gotdotnet.com/workspaces/workspace.aspx?id=c20d12b0-af52-402b9b7c-aaeb21d1f431


Supporta nativamente SQL Server, Oracle, OLE-DB,ODBC e può
essere esteso ad altri provider.
E’ basato sulle indicazioni della .NET Data Access Architecture
Guide: http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnbda/html/daag.asp
13
DAAB: Il problema dell’accesso ai dati in .NET
14
DAAB 3.1: Gestione multiprovider

Come si instanzia un provider:
AdoHelper helper = AdoHelper.CreateHelper(
“GotDotNet.ApplicationBlocks.Data”,
“GotDotNet.ApplicationBlocks.Data.SqlServer” );

oppure se li si configura nel file .config si possono creare degli alias
e instanziare quelli, per cambiare il provider al volo
 Attenzione alle stringhe di connessione, e alla sintassi SQL differente
tra i vari DB...


Una volta instanziato un provider si possono richiamare una serie di
metodi già pronti, tra cui quelli per leggere un DataSet, ottenere un
DataReader, un XmlReader, eseguire comandi, gestire parametri,
etc...
Problemi:
 Ad alcuni non piace la scelta di lasciare la gestione delle connessioni al
layer superiore
 Alcuni bug, documentati in giro sui blog e nei forum, ma c’è il sorgente ;-)
15
Usare le Transazioni con DAAB





16
Creare ed aprire un oggetto xxxConnection
Iniziare una transazione utilizzando il metodo BeginTransaction
dell’oggetto xxxConnection
Passare l’oggetto xxxTransaction ai metodi ExecuteNonQuery
Se ci sono problemi, chiamate il metodo Rollback dell’oggetto
xxxTransaction
Se tutto va bene, chiamate il metodo Commit
Demo: DAAB 3.1
Configuration Management Application Block

La gestione della configurazione delle applicazioni non è un problema
banale se si necessitano le seguenti cose:
 Cifratura dei dati sensibili (DPAPI, TripleDES, etc...)
 Indipendenza dal supporto (file, DB, registry, etc...)
 Caching delle informazioni



Il CMAB fornisce una soluzione a tutti questi problemi, attraverso
una struttura configurabile ed estensibile, in cui le informazioni
vengono memorizzate ed eventualmente cifrate usando dei provider
che possono essere anche custom.
Maggiori informazioni si hanno qui:
http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnbda/html/cmab.asp e sul workspace GotDotNet:
http://www.gotdotnet.com/workspaces/workspace.aspx?id=01875f69-9358-437ba8ae-fa4bf2e3080f
E’ basato sulla Application Architecture for .NET: Designing
Applications and Services:
http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnbda/html/distapp.asp
18
CMAB: Architettura
19
CMAB: Utilizzo e problemi

Per poter utilizzare il CMAB bisogna prima inserire le informazioni
di configurazione nel file .config, poi basta leggere o scrivere le
informazioni appoggiandosi ad una HashTable:
Dim configData As Hashtable
' Legge i dati dalla sezione Prova
configData = CType(ConfigurationManager.Read(“Prova"), Hashtable)
...
' Scrive i dati nella sezione Prova
ConfigurationManager.Write(“Prova",configData)


20
Si può definire anche una sezione di default e utilizzarla tramite un
Indexer, e si può anche utilizzare una serializzazione custom basata
su XmlSerializer
CMAB si basa sulla versione 2.0 del DAAB, e quindi attualmente
supporta solo SQL Server come DB.
CMAB: Configurazioni multiple




21
CMAB semplifica notevolmente lo scenario di avere più applicazioni
con un unico file di configurazione.
Si impostano varie sezioni, una per ogni applicazione o parte di
applicazione
Nei file .config delle applicazioni si configura CMAB per accedere
alle varie sezioni all’interno di un unico file
Dal codice si accede alle sezioni non preoccupandosi della posizione
fisica del file
Demo: CMAB
Exception Management Application Block





Questo blocco risolve il problema della gestione delle eccezioni e
della loro notifica all’utente/sviluppatore/amministratore di rete.
Anche questo si basa sul fatto di avere dei provider completamente
configurabili da file .config che permettono di scegliere
dinamicamente dove loggare le eccezioni, e chi le deve gestire.
Anche in questo caso i provider possono essere custom.
Una piccola nota, questo blocco va installato tramite Windows
Installer perchè deve registrare delle Event Sources utilizzate
quando scrive nell’Event Log.
L’alternativa è di utilizzare l’XCOPY deployment (o altri strumenti) e
di seguire questo articolo: http://msdn.microsoft.com/library/enus/dnbda/html/emab-rm.asp?frame=true#emab-rm_xcopydeployment
23
EMAB: Funzionamento
24
1.
L’applicazione o una libreria lancia
un’eccezione (meglio se derivata
BaseApplicationException)
2.
L’applicazione fa il catch
dell’eccezione, e richiama il metodo
ExceptionManager.Publish
3.
EMAB recupera le informazioni su
come gestire le eccezioni da un file
.config (machine, application, etc...)
4.
EMAB decide quale modulo
pubblicherò l’eccezione in base al
file di configurazione
5.
Il modulo scelto (o il
DefaultPublisher che scrive
nell’EventLog se non ce ne sono)
pubblica l’eccezione.
Perchè ereditare da BaseApplicationException?

In questo modo vengono catturate anche le seguenti informazioni:








25
Nome della macchina
Data/ora
Nome dell’Application Domain
Thread Identity
Windows Identity
Altre informazioni...
E’ serializzabile (può essere “remotizzata”)...
Deriva da System.ApplicationException e tutte le eccezioni gestite
da EMAB “dovrebbero” ereditare da questa...
Logging Application Block


26
Il Logging Application Block si basa su EIF (Enterprise
Instrumentation Framework) e fornisce un’infrastruttura
indipendente per realizzare il logging delle proprie applicazioni.
Completamente estensibile e configurabile (che noia, ma sono tutti
così ), semplifica ed estende allo stesso tempo i servizi di EIF.
Relazione tra EIF e LAB
27
Interazione tra LAB e EMAB




28
Il LAB è uscito dopo EMAB. E’ logico che alla fine si può usare il LAB
anche per loggare le eccezioni.
Il LAB ha un’infrastruttura di logging più elaborata, però se uno ha
già implementato EMAB non deve per forza reimplementare tutto.
Il LAB include un publisher per EMAB che pubblica le eccezioni
attraverso EIF, facendole poi elaborare dal blocco stesso.
Quindi basta cambiare la configurazione delle proprie applicazioni
che sfruttano EMAB per utilizzare il LAB...
Enterprise Library
Enterprise Library


Enterprise Library è un progetto congiunto di Microsoft e Avanade
e rappresenta l’evoluzione del concetto di Application Block.
Nella release 1.0 saranno incluse le “evoluzioni” dei seguenti blocchi:






Data Access
Configuration
Exception Handling
Logging & Instrumentation (EIF)
Caching
Security
•
•
•
•
•
30
Profile
Roles
Authorization
Authentication
Cryptography
Filosofia di Enterprise Library



31
Enterprise Library rappresenta l’unificazione dei vari Application
Block, in un progetto unico e integrato.
Non viene garantità la compatibilità con le versioni precedenti, che
potranno comunque essere utilizzate anche Side-by-Side.
Verranno forniti anche una serie di tool (esterni e/o integrati in
Visual Studio.NET) per semplificare l’integrazione e l’utilizzo della
libreria
Siamo in attesa...



Enterprise Library v1.0 verrà rilasciata a Gennaio 2005 (si spera) e
girerà con Visual Studio .NET 2003.
Attualmente è in fase di beta (privata).
Maggiori informazioni possono essere trovate su GotDotNet
assieme a tutta la documentazione dei vari blocchi aggiornati:
 http://www.gotdotnet.com/workspaces/workspace.aspx?id=295a464a6072-4e25-94e2-91be63527327

e su questo blog:
 http://weblogs.asp.net/scottdensmore/category/6624.aspx

E’ disponibile un sondaggio per aiutare la pianificazione di Enterprise
Library v2.0 che verrà rilasciata successivamente per .NET 2.0 e
VS2005
 http://www.zoomerang.com/recipient/surveyintro.zgi?p=WEB223XXWDJWYK
32
Blocchi più avanzati:
User Interface Process e
Updater Application Block
Model-View-Controller

La logica legata all’interfaccia utente cambia spesso

Gli stessi dati sono mostrati in modi diversi


34
Bisognerebe separare le sviluppo della business logic da quello
dell’interfaccia utente per adattarsi meglio agli skill delle persone
Le attività sull’interfaccia utente consistono sempre in
“presentazione” e “aggiornamento”

Il codice legato alla UI è troppo device-dependent

Automatizzare i test di UI è molto difficile
Model-View-Controller



Model: Gestisce il comportamento e
i dati, fornisce lo stato
dell’applicazione e implementa le
modifiche
Controller
View: Gestisce la visualizzazione
delle informazioni
Controller: Gestisce l’interazione
con l’utente, interagendo con il
model e/o la view
Model
View
35
Model-View-Controller
Benefici
Svantaggi
 View
 Complessità
 Ogni
multiple a parità di model e controller
componente può essere testato
individualmente
 Il numero di test UI viene ridotto
36
 Più
lento da aggiornare
User Interface Process Block

Aiuta ad implementare il pattern MVC

Descrive i “flussi” di UI come file XML

Permette il riuso del controller per applicazioni win & web

Gestisce lo stato

37
Permette di lanciare, interrompere e riprendere le operazioni senza
particolari implementazioni custom
User Interface Process

Un User Interface Process rappresenta uno ‘use case’

Può essere rappresentato come il flusso fra più view

Lo UIP Block usa un file XML per descrivere il flusso
<navigationGraph
iViewManager="WinFormViewManager"
name="Shopping"
state="State"
statePersist="SqlServerPersistState"
startView="cart">
browsecatalog
addItem
fail
resume
error
resume
congrats
<node view="browsecatalog">
<node view="browsecatalog">
<navigateTo navigateValue="addItem"
view="cart"/>
<navigateTo navigateValue="addItem" view="cart"/>
<navigateTo navigateValue="fail" view="error"
<navigateTo/>
navigateValue="fail" view="error" />
</node>
</node>
resume
fail
passCheckout
cart
checkout
checkout
<node view="cart">
<navigateTo navigateValue="resume" view="browsecatalog" />
<navigateTo navigateValue="checkout" view="checkout" />
<navigateTo navigateValue="fail" view="error" />
</node>
<node view="error">
<navigateTo navigateValue="resume" view="cart" />
</node>
<node view="checkout">
<navigateTo navigateValue="passCheckout" view="congrats" />
<navigateTo navigateValue="failCheckout" view="checkout" />
</node>
failCheckout
<node view="congratulations">
<navigateTo navigateValue="resume" view="cart" />
</node>
</navigationGraph>
38
UIP In Your Application
ASP.NET Pages or Windows Forms belonging to a use case
YourASP.NET
ASP.NETPages
Pagesor
or
Your
Windows
Form,sPages
Your
ASP.NET
Windows
Form,s
WebFormView
WebFormView
YourWindows
WindowsForms
Forms
Your
Your Windows Forms
WinFormView
WinFormView
WinFormView
WebFormView
Your State Type
(Optional)
ControllerBase
Your Controller
Class
MyFunc()
{
//do cool code
//more good stuff
}
State
State Persistence
State Persistence
Provider
State
Provider
Persistence
Provider
UIP Manager
Biz
Biz
Component
Components
s
DALC
DALC
Data
Access
39
Persistence Providers:
- SQL Server
- Encrypted SQL Server
- Memory
- ASP.NET Session
- Custom
View Manager
View Manager
View
Manager
View Managers:
- Windows Forms
- Web Pages
UIP Configuration
Application XML
Configuration File
Come bisogna implementarlo

Controller:





Ereditare da ControllerBase
Utilizzare l’oggetto state per contenere i dati
Utilizzare la proprietà NavigateValue per decidere dove andare
Interagire con i propri “busines layer” sottostanti
View:
 Ereditare le pagine web da WebFormView e le form windows da
WinFormView
 Per accedere al controller utilizzare la proprietà MyController, settata
automaticamente da UIP
40
Updater Application Block




41
All’inizio c’era AppUpdater, una sample disponibile su
http://windowsforms.net/articles/appupdater.aspx basata su
Terrarium
La sample si è poi evoluta ed è diventata l’Updater Application Block.
Questo blocco “semplifica” la scrittura di applicazioni
autoaggiornanti soprattutto in scenari di tipo kiosk o applicazioni
che monitorizzano continuamente la presenza di update sul server.
Prevede l’utilizzo di diversi protocolli per il trasferimento dei dati, e
fornisce anche un sistema per validare che i file scaricati siano
corretti.
UAB: Componenti e configurazione

Per funzionare ha bisogno di una determinata configurazione:
 Un’applicazione che lancia l’applicazione principale, in base al contenuto
del file di configurazione (ad es. AppStart.exe)
 L’applicazione vera e propria
 La classe che gestisce l’aggiornamento che può essere richiamata in vari
modi:
• All’interno dell’applicazione vera e propria
• All’interno dell’applicazione di lancio
• All’interno di un’applicazione o servizio indipendente che gira in background
42
UAB: Flusso degli eventi
43
Problematiche ed estensioni





44
Di default non è prevista la modalità “base”, parto, controllo,
aggiorno, lancio...
Di default mancano alcuni eventi come ad esempio “non ci sono
aggiornamenti”...
Il downloader BITS non è compatibile con BITS 2.0, è disponibile la
patch, ma solo per C# 
Per configurare e risolvere questi e altri problemi consiglio la
ricerca degli articoli su UAB nel blog di Duncan Mackenzie:
http://blogs.duncanmackenzie.net/duncanma/
Demo: UAB
Reference Architectures:
“Shadowfax”, “Fabriq” et al.
EDRA – o “Shadowfax” per gli amici



EDRA (Enterprise Development Reference Architecture) è il nome
ufficiale di “Shadowfax”
Fornisce una guida architetturale che può essere usata per
standardizzare lo sviluppo di sistemi distribuiti.
Include:






47
Un’application framework estensibile
4 Quickstart
Un’application template
Documentazione
Viene fornita anche un’applicazione di esempio (Global Bank
Reference Implementation) GBRI che mostra come usare EDRA in
uno scenario di online banking.
Potete trovare “Shadowfax” su GotDotNet:
http://www.gotdotnet.com/workspaces/workspace.aspx?id=9c29a9
63-594e-4e7a-9c45-576198df8058
“Shadowfax” App Framework

Clients
Services
 Separazione dell’interfaccia dei
servizi dall’implementazione
 Separazione della business logic
dalle problematiche “trasversali”
 Separazione della business logic dai
protocolli di trasporto sottostanti
 Differenti sistemi di deployment
`
Authorization
Service Transports
Business
Event
Business
Components
Business
Components
Business
Business
Workflow
Workflow
Data Access
Access
Data Logic
Logic
Components
Components
48
Service Agents
Service Agents
...
Business
Actions
Monitoring
Business
Business
Entities
Entities
Logging
Cross-Cutting Logic
Timouts
Validation
Service Dispatching Transports
Cross-cutting Logic Handlers
Cross-Cutting Logic
L’application framework fornisce:

Per capire meglio “Shadowfax” si
possono leggere anche le FAQ:
http://www.gotdotnet.com/team/ro
jacobs/shadowfax/shadowfaxfaq.a
spx
FABRIQ

FABRIQ è un’architettura di messaging one-way, basata su una rete
di code ad alte performance.

Richiede WSE 2.0 e EIF.

E’ disponibile un’implementazione di riferimento.

E’ il risultato della collaborazione fra Microsoft e Newtelligence

E’ disponibile su GotDotNet:
http://www.gotdotnet.com/workspaces/workspace.aspx?id=b4fcf02
f-3e71-4a15-a305-f0511240eec1

49
Potete trovare il codice, una presentazione e un lab che mostra
come implementare FABRIQ.
Scarica

Pattern and Practices & Application Blocks: cosa sono e come si