Architettura del software:
soluzioni del mondo reale
Andrea Saltarello
Software Architect @ Managed Designs S.r.l.
[email protected]
http://blogs.ugidotnet.org/pape
http://creativecommons.org/licenses/by-nc-nd/2.5/
Andrea Saltarello: chi era costui?
• Solution Architect @ Managed Designs S.r.l.
(http://www.manageddesigns.it)
• Presidente dello User Group Italiano .NET
(UGIdotNET – http://www.ugidotnet.org)
• Fondatore del Gruppo Italiano Utenti Solution
Architect (GUISA – http://www.guisa.org)
Agenda
•
•
•
•
Architettura: overview
Responsabilità dell’architetto
Architettura: luoghi comuni
Architettura vs. Mondo Reale
Cosa è l’Architettura?
Secondo la definizione ANSI/IEEE Std
1471-2000:
“L’organizzazione basilare di un sistema, rappresentato
dalle sue componenti, dalle relazioni che esistono tra di
loro e con l’ambiente circostante, e dai principi che
governano la sua progettazione e evoluzione."
Architettura: cosa?
L’architettura di un sistema *è* definita
durante la fase di progettazione.
L’architettura *non è* parte dell’analisi:
• l’analisi si concentra su cosa debba fare il sistema
• La progettazione si concentra su come debba
farlo
Architetto: le responsabilità
L’architetto:
• Recepisce i requisiti funzionali (emersi durante
l’analisi) e quelli non funzionali (es: HA, scalabilità,
security …)
• Effettua una analisi del rapporto costi/benefici per
determinare il miglior modo di soddisfare i requisiti,
eventualmente ricorrendo a componenti
commerciali o comunque già sviluppati
• Suddivide i grandi sistemi in (layer di) sottosistemi
individualmente assegnabili ad uno sviluppatore o
ad un gruppo di lavoro
• Genera “specifiche”: sketch, modelli o prototipi per
comunicare al gruppo di lavoro le modalità di
realizzazione
Architettura: luoghi comuni
• Architetto != Analista
• Architetto != Project Manager
• Architetto : Developer
– http://blogs.msdn.com/ramkoth/archive/2006/03/14/550363.aspx
• Architettura != Design
– Al limite… Design ∈ Architettura
Architettura vs. Mondo Reale
.NET Architectures in the Real World:
adottiamo come case study 3 progetti dei
quali sono l’architetto:
– GazzaTown
– Nirvana
– K2
Case Study #1: GazzaTown
https://csdev.fattorek.it/StarterSite/
http://creativecommons.org/licenses/by-nc-nd/2.5/
GazzaTown: credits
• [Realizzazione] K Group
(http://www.the-kgroup.com)
• [Sponsor] La Gazzetta dello Sport
(http://www.gazzetta.it)
• [Architettura] Managed Designs
(http://www.manageddesigns.it)
managed/designs
GazzaTown: overview
E’ la v1 del portale di commercio elettronico
de La Gazzetta dello Sport, e richiede
SLA e alta scalabilità
Deve integrarsi con il sistema gestionale del
fornitore di prodotti e servizi logistici
– Applicazione legacy
– Impossibilità pratica di modificare il codice
Possibilità di implementare i servizi in step
successivi
GazzaTown
Caratteristiche:
• Pipeline e-commerce gestita da Commerce Server 2007
• Integrazione con back-end gestita con BizTalk 2006
Pressochè totale assenza di design. In veste di
architetto, ho:
•
•
•
•
Recepito i requisiti
Scelto i sistemi da utilizzare
Specificato gli schemi XSD dei flussi dati
Scritto parte del codice per l’interfacciamento al gateway di
Banca Sella ☺
Case Study #2: Nirvana
http://creativecommons.org/licenses/by-nc-nd/2.5/
Nirvana: Credits
• [Realizzazione] Debug Software Tailoring
S.p.a. (http://www.debugswt.it)
• [Architettura] Managed Designs S.r.l.
(http://www.manageddesigns.it)
managed/designs
Nirvana: overview
E’ un tool/modeler per la realizzazione di
moduli applicativi in grado accedere e
modificare informazioni semi strutturate
memorizzate in sistemi diversi ed
incompatibili, e di visualizzarli su differenti
dispositivi di layout
E’ in grado di creare soluzioni basate su
moduli realizzati in modalità WYSIWIG,
abbattendo i tempi ed i costi propri delle
attività di programmazione e sviluppo
tradizionale
Nirvana
Nirvana
La struttura di un documento è definita mediante
un DOM (Document Object Model), interpretato e
visualizzato mediante opportuni rendering
engine.
Nirvana fornisce un tool di modellazione
(Document Studio), e i rendering engine
necessari a permettere il consumo dei documenti
da esso prodotti mediante differenti dispositivi
(HTTP User Agent, Thick Client Win32, PDA…).
Nirvana: architettura - 1/2
L’architettura generale è
Document/View:
…The idea is that you can model your application primarily
in terms of documents to store data and provide
interface-independent operations upon it, and views to
visualise and manipulate the data. Documents know how
to do input and output given stream objects, and views
are responsible for taking input from physical windows
and performing the manipulation on the document
data…
Il DOM è un Composite [GoF, 163]
Pattern “Composite” [GoF, 163]
Compose objects into
tree structures to
represent partwhole hierarchies.
Composite lets
clients treat
individual objects
and compositions
of objects
uniformly.
Nirvana: architettura - 2/2
L’elaborazione dei documenti avviene
mediante una pipeline basata su
Chain of Responsibility [GoF, 223]
Il design di Document Studio è
idiomatico, poiché basato su
Designer/DesignerHost dedicati al
DOM (che implementa
IComponent)
Pattern “Chain of Responsibility” [GoF, 223]
Avoid coupling the sender of a request to its
receiver by giving more than one object a
chance to handle the request. Chain the
receiving objects and pass the request
along the chain until an object handles it.
Il DOM di Nirvana
Nirvana Designer Architecture 1/2
Il design è decisamente idiomatico; in
sintesi:
La superficie di disegno ospita dei designer,
ognuno dei quali è associato ad una
istanza di un controllo disegnato. I
designer intercettano le gestures
dell’utente e le ripercuotono sui controlli.
La toolbox ed i menu interagiscono con la
superficie di disegno
Nirvana Designer Architecture 2/2
Technicalities:
• La superficie di disegno è una classe derivata di
Form, ed incapsula un designer host
• Il designer host è una classe che implementa
IDesignerHost e “ospita” i designer associati ai
controlli
• Tra i designer, uno è “root”: gestisce la superficie
ed il suo rapporto con menu/toolbox, ed è una
classe che implementa IRootDesigner e
IToolboxUser. Gli altri designer sono orientati al
singolo controllo ed estendono
ComponentDesigner
• Gli elementi del composite sono associati al
proprio designer mediante l’attributo
DesignerAttribute
• La toolbox implementa IToolboxService
• Il menù implementa IMenuService
Nirvana “unleashed”
Case Study #3: K2
http://creativecommons.org/licenses/by-nc-nd/2.5/
K2: Credits
• [Architettura] Managed Designs S.r.l.
(http://www.manageddesigns.it)
• [Realizzazione] Managed Designs S.r.l.
(http://www.manageddesigns.it)
managed/designs
K2: overview
K2:
• E’ un “classico” e “banale” gestionale
• Indipendenza dal database (tecnologia e
schema fisico)
• Indipendenza dalla GUI
K2: architettura
L’applicazione si basa su un Domain Model
[P of EAA, ] la cui persistenza è gestita da
una Unit of Work [P of EAA, 184] che
incapsula un Data Mapper [P of EAA,
165]
Per agevolare il supporto a GUI eterogenee,
l’architettura del presentation layer è
basata sul pattern Model View
Presenter
Pattern “Domain Model” [P of EAA, 116]
An object model of the domain that
incorporates both behavior and data.
At its worst business logic can be very
complex. Rules and logic describe
many different cases and slants of
behavior, and it's this complexity
that objects were designed to work
with. A Domain Model creates a web
of interconnected objects, where
each object represents some
meaningful individual, whether as
large as a corporation or as small as
a single line on an order form.
Unit of Work [P of EAA, 184]
When you're pulling data in and out of a
database, it's important to keep track of
what you've changed. Similarly you have
to insert new objects you create and
remove any objects you delete.
A Unit of Work keeps track of everything
you do during a business transaction that
can affect the database.
“Data Mapper” [P of EAA, 165]
A layer of Mappers (473) that moves data between objects and a
database while keeping them independent of each other and
the mapper itself.
The Data Mapper is a layer of software that separates the inmemory objects from the database. Its responsibility is to
transfer data between the two and also to isolate them from
each other. With Data Mapper the in-memory objects
needn't know even that there's a database present; they need
no SQL interface code, and certainly no knowledge of the
database schema. Since it's a form of Mapper, Data Mapper
itself is even unknown to the domain layer.
Data Mapper
Il Data Mapper di K2 è implementato usando
NHibernate, incapsulato nella Unit of
Work ed esposto mediante un Query
Object [P of EAA, 316]
“Query Object” [P of EAA, 316]
An object that represents a database
query.
A Query Object is an interpreter
[GoF], that is, a structure of
objects that can form itself into a
SQL query. You can create this
query by referring to classes and
fields rather than tables and
columns. In this way those who
write the queries can do so
independently of the database
schema and changes to the
schema can be localized in a
single place.
MVP – Passive view
Set state
Model
e
at
pd
U
t
en
ev
IView
Update view
View
Presenter
User action
•
•
•
•
Solo Presenter conosce Model
Solo Presente agisce verso Model
View è passiva (Passive View)
Model è indipendente da Presenter
K2 (reduced)
Per approfondire:
SharpDevelop è un ottimo esempio di
implementazione di un designer.
– http://www.sharpdevelop.net/OpenSource/SD/Default.a
spx
Il Northwind Starter Kit è una
applicazione open source con architettura
analoga a K2
http://www.manageddesigns.it/OpenSource.aspx
UGIdotNET web site (Special guest)
Link:
• GUISA: http://www.guisa.org
• Wiki UGIdotNET: http://wiki.ugidotnet.org
• MSDN Architecture Center:
http://www.microsoft.com/italy/msdn/riso
rsemsdn/architetti/default.mspx
Dubbi/Domande/Curiosità? ☺