Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed...

40
Design Patterns Applied Design Patterns Applied Andrea Saltarello Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l. http:// blogs.ugidotnet.org / pape

Transcript of Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed...

Page 1: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Design Patterns AppliedDesign Patterns AppliedDesign Patterns AppliedDesign Patterns Applied

Andrea SaltarelloAndrea SaltarelloSoftware Architect – Software Architect – Managed Designs S.r.l.http://blogs.ugidotnet.org/pape

Page 2: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

SponsorSponsor

Page 3: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Parliamo di…Parliamo di…Parliamo di…Parliamo di…

• Architettura e OODArchitettura e OOD

• Design PatternDesign Pattern

• Enterprise Application designEnterprise Application design

• Architettura e OODArchitettura e OOD

• Design PatternDesign Pattern

• Enterprise Application designEnterprise Application design

Page 4: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Cosa è il Cosa è il DesignDesign??Cosa è il Cosa è il DesignDesign??

• E’ la fase di E’ la fase di progettazioneprogettazione di un sistema. di un sistema.• La progettazione è la fase nella quale La progettazione è la fase nella quale

vengono presi in considerazione tutti i vengono presi in considerazione tutti i requisiti requisiti non funzionalinon funzionali (HA, scalabilità, (HA, scalabilità, integrabilità, …) del sistema:integrabilità, …) del sistema:– l’analisi si concentra su l’analisi si concentra su cosacosa debba fare il sistema debba fare il sistema– il design si concentra su il design si concentra su comecome debba farlo debba farlo

• Dobbiamo concepire l’Dobbiamo concepire l’architetturaarchitettura del del nostro sistemanostro sistema..

• E’ la fase di E’ la fase di progettazioneprogettazione di un sistema. di un sistema.• La progettazione è la fase nella quale La progettazione è la fase nella quale

vengono presi in considerazione tutti i vengono presi in considerazione tutti i requisiti requisiti non funzionalinon funzionali (HA, scalabilità, (HA, scalabilità, integrabilità, …) del sistema:integrabilità, …) del sistema:– l’analisi si concentra su l’analisi si concentra su cosacosa debba fare il sistema debba fare il sistema– il design si concentra su il design si concentra su comecome debba farlo debba farlo

• Dobbiamo concepire l’Dobbiamo concepire l’architetturaarchitettura del del nostro sistemanostro sistema..

Page 5: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Cosa è l’Cosa è l’ArchitetturaArchitettura??Cosa è l’Cosa è l’ArchitetturaArchitettura??

Secondo la definizione Secondo la definizione ANSI/IEEE Std ANSI/IEEE Std 1471-20001471-2000::

““L’organizzazione basilare di un sistema, rappresentato L’organizzazione basilare di un sistema, rappresentato dalle sue componenti, dalle relazioni che esistono tra dalle sue componenti, dalle relazioni che esistono tra di loro e con l’ambiente circostante, e dai principi che di loro e con l’ambiente circostante, e dai principi che governano la sua progettazione e evoluzione."governano la sua progettazione e evoluzione."

Secondo la definizione Secondo la definizione ANSI/IEEE Std ANSI/IEEE Std 1471-20001471-2000::

““L’organizzazione basilare di un sistema, rappresentato L’organizzazione basilare di un sistema, rappresentato dalle sue componenti, dalle relazioni che esistono tra dalle sue componenti, dalle relazioni che esistono tra di loro e con l’ambiente circostante, e dai principi che di loro e con l’ambiente circostante, e dai principi che governano la sua progettazione e evoluzione."governano la sua progettazione e evoluzione."

Page 6: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Object Oriented Design 101Object Oriented Design 101Object Oriented Design 101Object Oriented Design 101

Come procedere? Secondo l’autorevole “Gangs of Come procedere? Secondo l’autorevole “Gangs of Four”:Four”:

You must find pertinent objects, factor them into classes at You must find pertinent objects, factor them into classes at the right granularity, define class interfaces and the right granularity, define class interfaces and inheritance hierarchies, and estabilish key relationships inheritance hierarchies, and estabilish key relationships among them.among them.

In pratica, dobbiamo rielaborare il frutto dell’analisi In pratica, dobbiamo rielaborare il frutto dell’analisi tenendo in considerazione le possibilità offerte tenendo in considerazione le possibilità offerte dall’orientamento all’oggetto. Un esempio? I dall’orientamento all’oggetto. Un esempio? I Design PatternDesign Pattern! !

Come procedere? Secondo l’autorevole “Gangs of Come procedere? Secondo l’autorevole “Gangs of Four”:Four”:

You must find pertinent objects, factor them into classes at You must find pertinent objects, factor them into classes at the right granularity, define class interfaces and the right granularity, define class interfaces and inheritance hierarchies, and estabilish key relationships inheritance hierarchies, and estabilish key relationships among them.among them.

In pratica, dobbiamo rielaborare il frutto dell’analisi In pratica, dobbiamo rielaborare il frutto dell’analisi tenendo in considerazione le possibilità offerte tenendo in considerazione le possibilità offerte dall’orientamento all’oggetto. Un esempio? I dall’orientamento all’oggetto. Un esempio? I Design PatternDesign Pattern! !

Page 7: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Design Patterns DefinedDesign Patterns DefinedDesign Patterns DefinedDesign Patterns Defined

"Each pattern describes a problem which "Each pattern describes a problem which occurs over and over again in our occurs over and over again in our environment, and then describes the core environment, and then describes the core solution to that problem, in such a way that solution to that problem, in such a way that you can use the solution a million times over, you can use the solution a million times over, without ever doing it the same way twice.“without ever doing it the same way twice.“

Christoper AlexanderChristoper Alexander

A Pattern Language, 1977A Pattern Language, 1977

"Each pattern describes a problem which "Each pattern describes a problem which occurs over and over again in our occurs over and over again in our environment, and then describes the core environment, and then describes the core solution to that problem, in such a way that solution to that problem, in such a way that you can use the solution a million times over, you can use the solution a million times over, without ever doing it the same way twice.“without ever doing it the same way twice.“

Christoper AlexanderChristoper Alexander

A Pattern Language, 1977A Pattern Language, 1977

Page 8: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

OOD: Design PatternsOOD: Design PatternsOOD: Design PatternsOOD: Design Patterns

I pattern costituiscono soluzioni I pattern costituiscono soluzioni sperimentate a problemi concreti, sperimentate a problemi concreti, utilizzabili in contesti applicativi differenti. utilizzabili in contesti applicativi differenti.

Possiamo pensare ad un pattern come alla Possiamo pensare ad un pattern come alla descrizione, soluzione ed applicazione di descrizione, soluzione ed applicazione di un problema comune fattorizzato in una un problema comune fattorizzato in una soluzione elegante.soluzione elegante.

I pattern costituiscono soluzioni I pattern costituiscono soluzioni sperimentate a problemi concreti, sperimentate a problemi concreti, utilizzabili in contesti applicativi differenti. utilizzabili in contesti applicativi differenti.

Possiamo pensare ad un pattern come alla Possiamo pensare ad un pattern come alla descrizione, soluzione ed applicazione di descrizione, soluzione ed applicazione di un problema comune fattorizzato in una un problema comune fattorizzato in una soluzione elegante.soluzione elegante.

Page 9: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Design Patterns 101Design Patterns 101Design Patterns 101Design Patterns 101

Proviamo ad ipotizzare un pattern: Proviamo ad ipotizzare un pattern: dobbiamo isolare un problema ricorrente, dobbiamo isolare un problema ricorrente, e formulare una soluzione generalmente e formulare una soluzione generalmente valida.valida.

Facile! Pronti? Via!Facile! Pronti? Via!

Quanti interisti ci sono in sala? Quanti interisti ci sono in sala?

Proviamo ad ipotizzare un pattern: Proviamo ad ipotizzare un pattern: dobbiamo isolare un problema ricorrente, dobbiamo isolare un problema ricorrente, e formulare una soluzione generalmente e formulare una soluzione generalmente valida.valida.

Facile! Pronti? Via!Facile! Pronti? Via!

Quanti interisti ci sono in sala? Quanti interisti ci sono in sala?

Page 10: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Serie A, stagione 2004/2005Serie A, stagione 2004/2005Serie A, stagione 2004/2005Serie A, stagione 2004/2005

Ecco il problema Ecco il problema ricorrente! ricorrente!

Ora dobbiamo Ora dobbiamo formalizzare il formalizzare il patternpattern

Ecco il problema Ecco il problema ricorrente! ricorrente!

Ora dobbiamo Ora dobbiamo formalizzare il formalizzare il patternpattern

CHIEVO-INTERCHIEVO-INTER 2-22-2 XX

INTER-PALERMOINTER-PALERMO 1-11-1 XX

ATALANTA-INTERATALANTA-INTER 2-32-3 22

INTER-PARMAINTER-PARMA 2-22-2 XX

ROMA-INTERROMA-INTER 3-33-3 XX

INTER-UDINESEINTER-UDINESE 3-13-1 11

MILAN-INTERMILAN-INTER 0-00-0 XX

LECCE-INTERLECCE-INTER 2-22-2 XX

INTER-LAZIOINTER-LAZIO 1-11-1 XX

FIORENTINA-INTERFIORENTINA-INTER 1-11-1 XX

INTER-BOLOGNAINTER-BOLOGNA 2-22-2 XX

CAGLIARI-INTERCAGLIARI-INTER 3-33-3 XX

INTER-JUVENTUSINTER-JUVENTUS 2-22-2 XX

Page 11: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Design Patterns definedDesign Patterns definedDesign Patterns definedDesign Patterns defined

Un pattern è contraddistinto da quattro Un pattern è contraddistinto da quattro elementi:elementi:• NomeNome: è utile per descrivere la sua funzionalità in una : è utile per descrivere la sua funzionalità in una

o due parole. o due parole. • ProblemaProblema: descrive la classe di problemi affrontata : descrive la classe di problemi affrontata

dal pattern dal pattern • SoluzioneSoluzione: descrive in modo astratto come il pattern : descrive in modo astratto come il pattern

risolve il problema. Descrive gli elementi che risolve il problema. Descrive gli elementi che compongono il design, le loro responsabilità e le compongono il design, le loro responsabilità e le collaborazionicollaborazioni

• ConseguenzeConseguenze: sono importanti per poter valutare i : sono importanti per poter valutare i costi-benefici dell'utilizzo del pattern costi-benefici dell'utilizzo del pattern

Un pattern è contraddistinto da quattro Un pattern è contraddistinto da quattro elementi:elementi:• NomeNome: è utile per descrivere la sua funzionalità in una : è utile per descrivere la sua funzionalità in una

o due parole. o due parole. • ProblemaProblema: descrive la classe di problemi affrontata : descrive la classe di problemi affrontata

dal pattern dal pattern • SoluzioneSoluzione: descrive in modo astratto come il pattern : descrive in modo astratto come il pattern

risolve il problema. Descrive gli elementi che risolve il problema. Descrive gli elementi che compongono il design, le loro responsabilità e le compongono il design, le loro responsabilità e le collaborazionicollaborazioni

• ConseguenzeConseguenze: sono importanti per poter valutare i : sono importanti per poter valutare i costi-benefici dell'utilizzo del pattern costi-benefici dell'utilizzo del pattern

Page 12: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

““Utopia”Utopia” pattern defined pattern defined““Utopia”Utopia” pattern defined pattern defined

Proviamo a formulare il patternProviamo a formulare il pattern• Nome: Nome: UtopiaUtopia • Problema: subirne sistematicamente uno in Problema: subirne sistematicamente uno in

meno degli altri meno degli altri • Soluzione: Difensori decenti, attenzione e Soluzione: Difensori decenti, attenzione e

all’occorrenza tanti calci nel… all’occorrenza tanti calci nel… [ [diagramma]]• Conseguenze: l’applicazione del pattern può Conseguenze: l’applicazione del pattern può

comportare la vittoria di Scudetto/Champion’s comportare la vittoria di Scudetto/Champion’s League, in particolar modo in combinazione a League, in particolar modo in combinazione a CooperativePlayCooperativePlay

Page 13: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Design Patterns unleashedDesign Patterns unleashedDesign Patterns unleashedDesign Patterns unleashed

Il Testo di riferimento è:Il Testo di riferimento è:

Design Patterns: Elements of Reusable Design Patterns: Elements of Reusable Object-Oriented Software Object-Oriented Software di di Erich Gamma, Erich Gamma, Richard Helm, Ralph Johnson e John Richard Helm, Ralph Johnson e John VlissidesVlissides

Sono loro la “Gang of Four”Sono loro la “Gang of Four”

Il Testo di riferimento è:Il Testo di riferimento è:

Design Patterns: Elements of Reusable Design Patterns: Elements of Reusable Object-Oriented Software Object-Oriented Software di di Erich Gamma, Erich Gamma, Richard Helm, Ralph Johnson e John Richard Helm, Ralph Johnson e John VlissidesVlissides

Sono loro la “Gang of Four”Sono loro la “Gang of Four”

Page 14: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Design Patterns appliedDesign Patterns appliedDesign Patterns appliedDesign Patterns applied

I design pattern ci aiutano a risolvere I design pattern ci aiutano a risolvere problemi di tutti i giorni. Esempi:problemi di tutti i giorni. Esempi:

• Ricordate VB6? La default instance si ottiene Ricordate VB6? La default instance si ottiene con Scon Singletoningleton

• Ricordate ADODB? La dipendenza dal provider Ricordate ADODB? La dipendenza dal provider si elimina con si elimina con Factory MethodFactory Method

I design pattern ci aiutano a risolvere I design pattern ci aiutano a risolvere problemi di tutti i giorni. Esempi:problemi di tutti i giorni. Esempi:

• Ricordate VB6? La default instance si ottiene Ricordate VB6? La default instance si ottiene con Scon Singletoningleton

• Ricordate ADODB? La dipendenza dal provider Ricordate ADODB? La dipendenza dal provider si elimina con si elimina con Factory MethodFactory Method

Page 15: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Design Patterns applied: SingletonDesign Patterns applied: SingletonDesign Patterns applied: SingletonDesign Patterns applied: Singleton

Problema:Problema: Ensure a class has only one Ensure a class has only one instance and provide a global point of instance and provide a global point of access to it.access to it.

Problema:Problema: Ensure a class has only one Ensure a class has only one instance and provide a global point of instance and provide a global point of access to it.access to it.

Page 16: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .
Page 17: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Design Patterns applied: Factory methodDesign Patterns applied: Factory methodDesign Patterns applied: Factory methodDesign Patterns applied: Factory method

Problema:Problema: Define an interface for creating Define an interface for creating an object, but let subclasses decide which an object, but let subclasses decide which class to instantiate. Factory Method lets a class to instantiate. Factory Method lets a class defer instantiation to subclasses.class defer instantiation to subclasses.

Problema:Problema: Define an interface for creating Define an interface for creating an object, but let subclasses decide which an object, but let subclasses decide which class to instantiate. Factory Method lets a class to instantiate. Factory Method lets a class defer instantiation to subclasses.class defer instantiation to subclasses.

Page 18: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .
Page 19: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Dice il saggio…Dice il saggio…Dice il saggio…Dice il saggio…

Non dobbiamo pensare ai pattern come Non dobbiamo pensare ai pattern come a a dogmidogmi, bensì come alle , bensì come alle centuriecenturie di di Nostradamus: vanno interpretati Nostradamus: vanno interpretati

Non dobbiamo pensare ai pattern come Non dobbiamo pensare ai pattern come a a dogmidogmi, bensì come alle , bensì come alle centuriecenturie di di Nostradamus: vanno interpretati Nostradamus: vanno interpretati

Page 20: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Design Patterns appliedDesign Patterns appliedDesign Patterns appliedDesign Patterns applied

Basta con gli esempi sintetici: mettiamo i Basta con gli esempi sintetici: mettiamo i pattern alla prova in una applicazione pattern alla prova in una applicazione reale!reale!

Ipotizziamo una applicazione enterprise con Ipotizziamo una applicazione enterprise con i “soliti” requisiti:i “soliti” requisiti:

• DB-independent (tecnologia DB-independent (tecnologia ee struttura) struttura)• GUI-independent (almeno Win e Web)GUI-independent (almeno Win e Web)

Basta con gli esempi sintetici: mettiamo i Basta con gli esempi sintetici: mettiamo i pattern alla prova in una applicazione pattern alla prova in una applicazione reale!reale!

Ipotizziamo una applicazione enterprise con Ipotizziamo una applicazione enterprise con i “soliti” requisiti:i “soliti” requisiti:

• DB-independent (tecnologia DB-independent (tecnologia ee struttura) struttura)• GUI-independent (almeno Win e Web)GUI-independent (almeno Win e Web)

Page 21: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Enterprise application designEnterprise application designEnterprise application designEnterprise application design

Per soddisfare i requisiti, optiamo per una Per soddisfare i requisiti, optiamo per una architettura a 3 livelli:architettura a 3 livelli:

• Concentrare la logica applicativa nel Concentrare la logica applicativa nel business layerbusiness layer rende agevole rende agevole implementare implementare GUIGUI eterogenee eterogenee

• Isolare l’accesso ai dati in un Isolare l’accesso ai dati in un DALDAL ( (Data Data Access LayerAccess Layer) permette di disaccoppiare ) permette di disaccoppiare la la business logicbusiness logic dal DB dal DB

Per soddisfare i requisiti, optiamo per una Per soddisfare i requisiti, optiamo per una architettura a 3 livelli:architettura a 3 livelli:

• Concentrare la logica applicativa nel Concentrare la logica applicativa nel business layerbusiness layer rende agevole rende agevole implementare implementare GUIGUI eterogenee eterogenee

• Isolare l’accesso ai dati in un Isolare l’accesso ai dati in un DALDAL ( (Data Data Access LayerAccess Layer) permette di disaccoppiare ) permette di disaccoppiare la la business logicbusiness logic dal DB dal DB

Page 22: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

OOD: Business EntitiesOOD: Business EntitiesOOD: Business EntitiesOOD: Business Entities

Per disaccoppiare l’applicazione dalla Per disaccoppiare l’applicazione dalla struttura del DB, modelliamo come classi struttura del DB, modelliamo come classi le strutture dati gestite. le strutture dati gestite.

Ci ispiriamo al pattern Ci ispiriamo al pattern Domain Model Domain Model [[P of P of EAAEAA, 116], 116]

Per disaccoppiare l’applicazione dalla Per disaccoppiare l’applicazione dalla struttura del DB, modelliamo come classi struttura del DB, modelliamo come classi le strutture dati gestite. le strutture dati gestite.

Ci ispiriamo al pattern Ci ispiriamo al pattern Domain Model Domain Model [[P of P of EAAEAA, 116], 116]

Page 23: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

““Domain Model” patternDomain Model” pattern““Domain Model” patternDomain Model” pattern

An object model of the domain that incorporates An object model of the domain that incorporates both behavior and data.both behavior and data.

At its worst business logic can be very complex. At its worst business logic can be very complex. Rules and logic describe many different cases Rules and logic describe many different cases and slants of behavior, and it's this complexity and slants of behavior, and it's this complexity that objects were designed to work with. A that objects were designed to work with. A Domain Model creates a web of interconnected Domain Model creates a web of interconnected objects, where each object represents some objects, where each object represents some meaningful individual, whether as large as a meaningful individual, whether as large as a corporation or as small as a single line on an corporation or as small as a single line on an order form. order form.

An object model of the domain that incorporates An object model of the domain that incorporates both behavior and data.both behavior and data.

At its worst business logic can be very complex. At its worst business logic can be very complex. Rules and logic describe many different cases Rules and logic describe many different cases and slants of behavior, and it's this complexity and slants of behavior, and it's this complexity that objects were designed to work with. A that objects were designed to work with. A Domain Model creates a web of interconnected Domain Model creates a web of interconnected objects, where each object represents some objects, where each object represents some meaningful individual, whether as large as a meaningful individual, whether as large as a corporation or as small as a single line on an corporation or as small as a single line on an order form. order form.

Page 24: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .
Page 25: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

OOD: il data layerOOD: il data layerOOD: il data layerOOD: il data layer

Il DAL incapsula l’accesso al database, al Il DAL incapsula l’accesso al database, al fine di disaccoppiare la fine di disaccoppiare la business logicbusiness logic dalla tecnologia di storage. Utilizziamo il dalla tecnologia di storage. Utilizziamo il pattern pattern Table Data Gateway Table Data Gateway [[P of EAAP of EAA, , 144]144]

Il DAL incapsula l’accesso al database, al Il DAL incapsula l’accesso al database, al fine di disaccoppiare la fine di disaccoppiare la business logicbusiness logic dalla tecnologia di storage. Utilizziamo il dalla tecnologia di storage. Utilizziamo il pattern pattern Table Data Gateway Table Data Gateway [[P of EAAP of EAA, , 144]144]

Page 26: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

““Table Data Gateway” patternTable Data Gateway” pattern““Table Data Gateway” patternTable Data Gateway” pattern

An object that acts as a Gateway to a database An object that acts as a Gateway to a database table. One instance handles all the rows in the table. One instance handles all the rows in the table.table.

A Table Data Gateway holds all the SQL for A Table Data Gateway holds all the SQL for accessing a single table or view: selects, inserts, accessing a single table or view: selects, inserts, updates, and deletes. Other code calls its updates, and deletes. Other code calls its methods for all interaction with the database. methods for all interaction with the database.

An object that acts as a Gateway to a database An object that acts as a Gateway to a database table. One instance handles all the rows in the table. One instance handles all the rows in the table.table.

A Table Data Gateway holds all the SQL for A Table Data Gateway holds all the SQL for accessing a single table or view: selects, inserts, accessing a single table or view: selects, inserts, updates, and deletes. Other code calls its updates, and deletes. Other code calls its methods for all interaction with the database. methods for all interaction with the database.

Page 27: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

““Table Data Gateway” (TDG) revisedTable Data Gateway” (TDG) revised““Table Data Gateway” (TDG) revisedTable Data Gateway” (TDG) revised

La nostra applicazione disporrà di un DAL La nostra applicazione disporrà di un DAL specifico per ogni DBMS supportato; definiamo specifico per ogni DBMS supportato; definiamo quindi un TDG astratto (es: interfaccia) che sarà quindi un TDG astratto (es: interfaccia) che sarà implementato dai DAL.implementato dai DAL.

La business logic riceverà un riferimento al DAL La business logic riceverà un riferimento al DAL attivo, che sarà attivato da una attivo, che sarà attivato da una Abstract Abstract Factory [GoFFactory [GoF, 87, 87]]

La formulazione accademica di TDG riceve in La formulazione accademica di TDG riceve in ingresso i valori dei campi come parametri ingresso i valori dei campi come parametri indipendenti: per rinforzare l’indipendenza dalla indipendenti: per rinforzare l’indipendenza dalla struttura del DB, noi utilizzeremo come struttura del DB, noi utilizzeremo come parametri istanze delle parametri istanze delle business entitiesbusiness entities

La nostra applicazione disporrà di un DAL La nostra applicazione disporrà di un DAL specifico per ogni DBMS supportato; definiamo specifico per ogni DBMS supportato; definiamo quindi un TDG astratto (es: interfaccia) che sarà quindi un TDG astratto (es: interfaccia) che sarà implementato dai DAL.implementato dai DAL.

La business logic riceverà un riferimento al DAL La business logic riceverà un riferimento al DAL attivo, che sarà attivato da una attivo, che sarà attivato da una Abstract Abstract Factory [GoFFactory [GoF, 87, 87]]

La formulazione accademica di TDG riceve in La formulazione accademica di TDG riceve in ingresso i valori dei campi come parametri ingresso i valori dei campi come parametri indipendenti: per rinforzare l’indipendenza dalla indipendenti: per rinforzare l’indipendenza dalla struttura del DB, noi utilizzeremo come struttura del DB, noi utilizzeremo come parametri istanze delle parametri istanze delle business entitiesbusiness entities

Page 28: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .
Page 29: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Domain Model strikes backDomain Model strikes backDomain Model strikes backDomain Model strikes back

Che succede se chiediamo al DAL una Che succede se chiediamo al DAL una ricerca per codice/chiave e l’elemento ricerca per codice/chiave e l’elemento corrispondente non esiste nel DB?corrispondente non esiste nel DB?

Restituire un Restituire un nullnull nonnon è una soluzione, è una soluzione, perché “rompe” il polimorfismo.perché “rompe” il polimorfismo.

Usiamo il pattern Usiamo il pattern Special CaseSpecial Case [P of EAA, [P of EAA, 496]496]

Che succede se chiediamo al DAL una Che succede se chiediamo al DAL una ricerca per codice/chiave e l’elemento ricerca per codice/chiave e l’elemento corrispondente non esiste nel DB?corrispondente non esiste nel DB?

Restituire un Restituire un nullnull nonnon è una soluzione, è una soluzione, perché “rompe” il polimorfismo.perché “rompe” il polimorfismo.

Usiamo il pattern Usiamo il pattern Special CaseSpecial Case [P of EAA, [P of EAA, 496]496]

Page 30: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

““Special Case” patternSpecial Case” pattern““Special Case” patternSpecial Case” pattern

A subclass that provides special behavior for A subclass that provides special behavior for particular cases.particular cases.

Nulls are awkward things in object-oriented Nulls are awkward things in object-oriented programs because they defeat polymorphism. programs because they defeat polymorphism. (…)(…) Instead of returning null, or some odd value, Instead of returning null, or some odd value, return a Special Case that has the same return a Special Case that has the same interface as what the caller expects interface as what the caller expects

A subclass that provides special behavior for A subclass that provides special behavior for particular cases.particular cases.

Nulls are awkward things in object-oriented Nulls are awkward things in object-oriented programs because they defeat polymorphism. programs because they defeat polymorphism. (…)(…) Instead of returning null, or some odd value, Instead of returning null, or some odd value, return a Special Case that has the same return a Special Case that has the same interface as what the caller expects interface as what the caller expects

Page 31: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .
Page 32: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

DAL: un approccio futuristicoDAL: un approccio futuristicoDAL: un approccio futuristicoDAL: un approccio futuristico

Se avessimo a disposizione un Se avessimo a disposizione un ORMORM ((ObjectSpacesObjectSpaces… Se ci sei, batti un colpo! … Se ci sei, batti un colpo! ) potremmo usare il pattern ) potremmo usare il pattern AdapterAdapter [GoF, 139] per trasformarne l’interfaccia in [GoF, 139] per trasformarne l’interfaccia in quella del DAL/TDG.quella del DAL/TDG.

Se avessimo a disposizione un Se avessimo a disposizione un ORMORM ((ObjectSpacesObjectSpaces… Se ci sei, batti un colpo! … Se ci sei, batti un colpo! ) potremmo usare il pattern ) potremmo usare il pattern AdapterAdapter [GoF, 139] per trasformarne l’interfaccia in [GoF, 139] per trasformarne l’interfaccia in quella del DAL/TDG.quella del DAL/TDG.

Page 33: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

OOD: Business LayerOOD: Business LayerOOD: Business LayerOOD: Business Layer

Per prima cosa, dobbiamo esporre alla GUI Per prima cosa, dobbiamo esporre alla GUI le funzionalità OLTP offerte dallo strato le funzionalità OLTP offerte dallo strato dati. dati.

In pratica, implementiamo un In pratica, implementiamo un MapperMapper [P of [P of EAA, 473] che funga da EAA, 473] che funga da GatewayGateway [P of [P of EAA, 466] verso il DALEAA, 466] verso il DAL

Per prima cosa, dobbiamo esporre alla GUI Per prima cosa, dobbiamo esporre alla GUI le funzionalità OLTP offerte dallo strato le funzionalità OLTP offerte dallo strato dati. dati.

In pratica, implementiamo un In pratica, implementiamo un MapperMapper [P of [P of EAA, 473] che funga da EAA, 473] che funga da GatewayGateway [P of [P of EAA, 466] verso il DALEAA, 466] verso il DAL

Page 34: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .
Page 35: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

OOD: Biz Logic vs. DALOOD: Biz Logic vs. DALOOD: Biz Logic vs. DALOOD: Biz Logic vs. DAL

Un modo interessante per disaccoppiare le Un modo interessante per disaccoppiare le classi di business dal corrispettivo DAL classi di business dal corrispettivo DAL consiste nell’usare il pattern consiste nell’usare il pattern Inversion of Inversion of ControlControl ( (IoCIoC), ossia una applicazione del ), ossia una applicazione del pattern pattern PluginPlugin [P of EAA, 499] [P of EAA, 499]

Un modo interessante per disaccoppiare le Un modo interessante per disaccoppiare le classi di business dal corrispettivo DAL classi di business dal corrispettivo DAL consiste nell’usare il pattern consiste nell’usare il pattern Inversion of Inversion of ControlControl ( (IoCIoC), ossia una applicazione del ), ossia una applicazione del pattern pattern PluginPlugin [P of EAA, 499] [P of EAA, 499]

Page 36: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

““Inversion of Control” patternInversion of Control” pattern““Inversion of Control” patternInversion of Control” pattern

IoCIoC è anche definito è anche definito Dependency Dependency InjectionInjection, e consiste nel far pubblicare ad , e consiste nel far pubblicare ad una classe una API che permetta al una classe una API che permetta al contesto di esecuzione di impostarne a contesto di esecuzione di impostarne a runtime le dipendenze. E’ utile per:runtime le dipendenze. E’ utile per:

• Iniettare Iniettare mock objectmock object

• Utilizzare Utilizzare light containerlight container per configurare per configurare l’applicazione l’applicazione

IoCIoC è anche definito è anche definito Dependency Dependency InjectionInjection, e consiste nel far pubblicare ad , e consiste nel far pubblicare ad una classe una API che permetta al una classe una API che permetta al contesto di esecuzione di impostarne a contesto di esecuzione di impostarne a runtime le dipendenze. E’ utile per:runtime le dipendenze. E’ utile per:

• Iniettare Iniettare mock objectmock object

• Utilizzare Utilizzare light containerlight container per configurare per configurare l’applicazione l’applicazione

Page 37: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .
Page 38: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

Pattern vs. IdiomiPattern vs. IdiomiPattern vs. IdiomiPattern vs. Idiomi

• Un pattern insiste sul paradigmaUn pattern insiste sul paradigma

• Un idioma insiste sulla tecnologiaUn idioma insiste sulla tecnologia

Es: Observer vs. Delegate/eventiEs: Observer vs. Delegate/eventi

• Un pattern insiste sul paradigmaUn pattern insiste sul paradigma

• Un idioma insiste sulla tecnologiaUn idioma insiste sulla tecnologia

Es: Observer vs. Delegate/eventiEs: Observer vs. Delegate/eventi

Page 39: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

RiferimentiRiferimentiRiferimentiRiferimentiDocs:Docs:• IoC: IoC:

http://www.martinfowler.com/articles/injection.html

Pattern:Pattern:• GoF

http://www.dofactory.com• P of EAA

http://www.martinfowler.com/eaaCatalog/index.html

Tool:• NSpring:

http://sourceforge.net/projects/nspring

Page 40: Design Patterns Applied Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. .

LinksLinksLinksLinks

http://www.ugidotnet.org

http://forum.ugidotnet.org

http://mobile.ugidotnet.org