Download - Design patterns - parte 1

Transcript
Page 1: Design patterns - parte 1
Page 2: Design patterns - parte 1

PATTERN  ARCHITETTRALI  

Page 3: Design patterns - parte 1
Page 4: Design patterns - parte 1
Page 5: Design patterns - parte 1
Page 6: Design patterns - parte 1
Page 7: Design patterns - parte 1

Pa#ern  è  un  termine  inglese  che  può  essere  trado>o,  a  seconda  del   contesto,   con  disegno,  modello,   schema,   schema   ricorrente  e,   in   generale,   può  essere  u@lizzato  per   indicare  una   regolarità  che   si   riscontra   all'interno   di   un   insieme   di   oggeD   osserva@  oppure  la  regolarità  che  si  osserva  nello  spazio  e/o  nel  tempo  in  determina@  fenomeni  dinamici.  

Page 8: Design patterns - parte 1

fabio.armani  

Page 9: Design patterns - parte 1

Overview  

•  Analysis  pa>erns  •  Architectural  pa>erns  •  Design  pa>erns  •  Enterprise  pa>erns  •  GRASP  pa>erns  •  Implementa@on  pa>erns  •  J2EE  Core  pa>erns  •  SCM  pa>erns  

Page 10: Design patterns - parte 1

Overview  

•  Design  Pa>ern  –  Stru>ura  di  un  pa>ern    –  Classificazione  dei  design  pa>ern    

Page 11: Design patterns - parte 1

Design  Pa>erns  •  I  design  pa>erns  sono  soluzioni  ricorren@  a  problemi  comuni  nel  

campo  del  soTware  design    •  I  design  pa>erns  in  ambito  informa@co  vengono  formalmente  

descriD  per  la  prima  volta  nel  libro  Design  Pa*erns:  Elements  of  Reusable  Object-­‐Oriented  So<ware,  i  cui  autori  vengono  spesso  chiama@  la  Gang  of  Four  o  GoF  o  Go4  

•  I  design  pa>erns  NON  rappresentano  la  proge>azione  completa  di  una  soluzione,  che  può  essere  trasformata  dire>amente  in  codice    

•  Essi  rappresentano  piu>osto  la  descrizione  di  come  risolvere  un  problema  che  può    sorgere  in  differen@  situazioni.  I  design  pa>erns  sono  una  sorta  di  template  rispe>o  alla  soluzione  di  problemi  ricorren@  in  determina@  campi  dell’informa@ca  

Page 12: Design patterns - parte 1

Design  Pa>erns  •  I  design  pa>erns  possono  velocizzare  il  processo  di  sviluppo  del  

soTware  fornendo  paradigmi  di  programmazione  prova@  e  testa@    •  I  design  pa>erns  forniscono  soluzioni  generali,  documentate  in  un  

formato  che  non  richiede  specifiche  legate  ad  un  par@colare  problema    

•  I  design  pa>erns  cos@tuiscono  un  veicolo  per  la  comunicazione  inerente  la  proge>azione  e  le  archite>ure  soTware  

Page 13: Design patterns - parte 1

Design  Pa>erns  >  libri  

Page 14: Design patterns - parte 1

Stru>ura  di  un  pa>ern  •  Un  pa>ern  può  avere  una  precisa  stru>ura  che  lo  descrive  

Page 15: Design patterns - parte 1

Stru>ura  di  un  pa>ern  •  nome:  iden@fica  il  pa>ern  e  deve  rappresentarlo  il  più  

possibile  (es:  Factory)  •  descrizione:  una  breve  descrizione  dell’obbieDvo  del  pa>ern,  

corrispondente  in  quasi  tuD  i  casi  al  “intent”  del  libro  di  GoF    •  problema:  rappresenta  la  descrizione  della  situazione  alla  

quale  si  può  applicare  il  pa>ern    •  soluzione:  rappresenta  la  descrizione  degli  elemen@  cos@tu@vi  

del  proge>o  con  le  loro  relazioni,  senza  però  scendere  nei  de>agli  implementa@vi.  Quello  che  si  vuole  descrivere  infaD  è  un  problema  astra>o  e  la  rela@va  configurazione  di  elemen@  ada>a  a  risolverlo    

Page 16: Design patterns - parte 1

Stru>ura  di  un  pa>ern  •  stru5ura  del  pa5ern:  diagramma  di  classi  in  UML  della  

stru>ura  generica  del  pa>ern  •  applicazione  del  pa5ern:  offre  un  diagramma  UML  delle  classi  

del  problema,  presenta  l’abbinamento  delle  classi  del  problema  con  le  classi  che  descrivono  la  stru>ura  conce>uale  del  pa>ern,  descrive  l’implementazione  del  il  codice  Java,  e  presenta  e  commenta  gli  output  dell’esecuzione  

•  osservazioni  sull’implementazione  in  Java:  presenta  gli  aspeD  par@colari  che  riguardano  l’implementazione  del  pa>ern  in  Java  

Page 17: Design patterns - parte 1

Stru>ura  di  un  pa>ern  •  conseguenze:  i  risulta@  e  i  vincoli  derivan@  dall’applicazione  

del  pa>ern.  Essi  sono  fondamentali,  in  quanto  possono  risultare  determinan@  nella  scelta  del  pa>ern  stesso:  le  conseguenze  comprendono  considerazioni  legate  alle  risorse  computazionali  (tempo  e  memoria),  possono  descrivere  le  implicazioni  del  pa>ern  con  alcuni  linguaggi  di  programmazione  e  l’impa>o  di  quest’ul@mo  con  il  resto  del  proge>o    

Page 18: Design patterns - parte 1

Classificazione  dei  design  pa>ern  

•  Ci  sono  diversi  criteri  per  classificare  i  design  pa>erns,  i  più  comuni  dei  quali  sono  quelli  che  evidenziano  il  @po  di  problema  che  si  cerca  di  risolvere    

•  Nel  suo  libro,  la  Gang  Of  Four  individuò  23  design  pa>ern  suddivisi  in  tre  categorie.  :  stru>urali,  creazionali  e  comportamentali  

 

Page 19: Design patterns - parte 1

PATTERN  CREAZIONALI  

Page 20: Design patterns - parte 1

Classificazione  dei  design  pa>ern  

•  Pa*ern  Creazionali:  rendono  i  componen@  del  sistema  che  usano  determina@  oggeD  indipenden@  da  come  tali  oggeD  sono  sta@  crea@,  compos@  e  rappresenta@.  

•  I  pa>ern  creazionali  nascondono  i  costru>ori  delle  classi  e  me>ono  al  loro  posto  dei  metodi  creando  un’interfaccia.  

•  In  questo  modo  si  possono  u@lizzare  oggeD  senza  sapere  come  sono  implementa@.  

Page 21: Design patterns - parte 1

Pa>ern  creazionali  •  L'Abstract  factory  (le>eralmente,  "fabbrica  astra>a")  fornisce  

un'interfaccia  per  creare  famiglie  di  oggeD  connessi  o  dipenden@  tra  loro,  in  modo  che  non  ci  sia  necessità  da  parte  degli  u@lizzatori  di  specificare  i  nomi  delle  classi  concrete  all'interno  del  proprio  codice.  

•  Il  Builder  ("costru>ore")  separa  la  costruzione  di  un  ogge>o  complesso  dalla  sua  rappresentazione,  in  modo  che  il  processo  di  costruzione  stesso  possa  creare  diverse  rappresentazioni.  

•  Il  Factory  method  ("metodo  fabbrica")  fornisce  un'interfaccia  per  creare  un  ogge>o,  ma  lascia  che  le  so>oclassi  decidano  quale  ogge>o  istanziare.  

Page 22: Design patterns - parte 1

Pa>ern  creazionali  •  La  Lazy  ini?aliza?on  ("inizializzazione  pigra")  è  la  taDca  di  istanziare  un  

ogge>o  solo  nel  momento  in  cui  deve  essere  usato  per  la  prima  volta.  È  u@lizzato  spesso  insieme  al  pa>ern  factory  method.  

•  Il  Prototype  ("proto@po")  perme>e  di  creare  nuovi  oggeD  clonando  un  ogge>o  iniziale,  o  proto@po.  

•  Il  Singleton  ("singole>o")  ha  lo  scopo  di  assicurare  che  di  una  classe  possa  essere  creata  una  sola  istanza.  

Page 23: Design patterns - parte 1

PATTERN  STRUTTURALI  

Page 24: Design patterns - parte 1

Classificazione  dei  design  pa>ern  

•  Pa*ern  Stru*urali:  perme>ono  di  riu@lizzare  oggeD  esisten@,  u@lizzando  l’ereditarietà  e  il  polimorfismo  per  comporre  interfacce  diverse  o  implementazioni  di  una  stessa  interfaccia.  

•  I  pa>ern  stru>urali  riguardano  il  modo  in  cui  più  oggeD  sono  collega@  tra  loro  per  formare  stru>ure  complesse.  

Page 25: Design patterns - parte 1

Pa>ern  stru>urali  •  L'Adapter  ("ada>atore")  converte  l'interfaccia  di  una  classe  in  una  

interfaccia  diversa.  •  Bridge  ("ponte")  perme>e  di  separare  l'astrazione  di  una  classe  dalla  sua  

implementazione,  per  perme>ere  loro  di  variare  indipendentemente.  •  Il  Composite  ("composto"),  u@lizzato  per  dare  la  possibilità  all'u@lizzatore  

di  manipolare  gli  oggeD  in  modo  uniforme,  organizza  gli  oggeD  in  una  stru>ura  ad  albero.  

•  Il  Container  ("contenitore")  offre  una  soluzione  alla  ro>ura  dell'incapsulamento  per  via  dell'uso  dell'ereditarietà.  

•  Il  Decorator  ("decoratore")  consente  di  aggiungere  metodi  a  classi  esisten@  durante  il  run-­‐@me  (cioè  durante  lo  svolgimento  del  programma),  perme>endo  una  maggior  flessibilità  nell'aggiungere  delle  funzionalità  agli  oggeD.  

•  Extensibility  ("estendibilità")  

Page 26: Design patterns - parte 1

Pa>ern  stru>urali  •  Il  Façade  ("facciata")  perme>e,  a>raverso  un'interfaccia  più  semplice,  

l'accesso  a  so>osistemi  che  espongono  interfacce  complesse  e  diverse  tra  loro.  

•  Flyweight  ("peso  piuma"),  che  perme>e  di  separare  la  parte  variabile  di  una  classe  dalla  parte  che  può  essere  riu@lizzata.  

•  Proxy  fornisce  una  rappresentazione  di  un  ogge>o  di  accesso  difficile  o  che  richiede  un  tempo  importante  per  l’accesso  o  creazione.  Il  Proxy  consente  di  pos@cipare  l’accesso  o  creazione  al  momento  in  cui  sia  davvero  richiesto.  

•  Pipes  and  filters  ("condoD  e  filtri")  •  Private  class  data  ("da@  di  classe  priva@")  

Page 27: Design patterns - parte 1

PATTERN  COMPORTAMENTALI  

Page 28: Design patterns - parte 1

Classificazione  dei  design  pa>ern  

•  Pa*ern  Comportamentali:  riguardano  l’assegnazione  di  responsabilità  agli  oggeD,  incapsulando  il  comportamento  in  un  ogge>o  e  delegando  ad  esso  determinate  richieste.  

•  I  pa>ern  comportamentali  forniscono  soluzione  alle  più  comuni  @pologie  di  interazione  tra  gli  oggeD    

Page 29: Design patterns - parte 1

Pa>ern  comportamentali  •  Chain  of  Responsibility  ("catena  di  responsabilità")  diminuisce  

l'accoppiamento  fra  l'ogge>o  che  effe>ua  una  richiesta  e  quello  che  la  soddisfa,  dando  a  più  oggeD  la  possibilità  di  soddisfarla  

•  Il  Command  ("comando")  perme>e  di  isolare  la  porzione  di  codice  che  effe>ua  un'azione  dal  codice  che  ne  richiede  l'esecuzione.  

•  Event  Listener  ("ascoltatore  di  even@")  •  Hierarchical  Visitor  ("visitatore  di  gerarchia")  •  Interpreter  ("interprete")  dato  un  linguaggio,  definisce  una  

rappresentazione  della  sua  gramma@ca  insieme  ad  un  interprete  che  u@lizza  questa  rappresentazione  per  l'interpretazione  delle  espressioni  in  quel  determinato  linguaggio.  

•  L'Iterator  ("iteratore")  risolve  diversi  problemi  connessi  all'accesso  e  alla  navigazione  a>raverso  gli  elemen@  di  una  stru>ura  da@,  senza  esporre  i  de>agli  dell'implementazione  e  della  stru>ura  interna  del  contenitore.  

Page 30: Design patterns - parte 1

Pa>ern  comportamentali  •  Il  Mediator  ("mediatore")  si  interpone  nelle  comunicazioni  tra  oggeD,  allo  

scopo  di  aggiornare  lo  stato  del  sistema  quando  uno  qualunque  di  essi  comunica  un  cambiamento  del  proprio  stato.  

•  Il  design  pa>ern  Memento  ("promemoria")  è  l'operazione  di  estrarre  lo  stato  interno  di  un  ogge>o,  senza  violarne  l'incapsulazione,  e  memorizzarlo  per  poterlo  ripris@nare  in  un  momento  successivo.  

•  L'Observer  ("osservatore")  definisce  una  dipendenza  uno  a  mol@  fra  oggeD  diversi,  in  maniera  tale  che  se  un  ogge>o  cambia  il  suo  stato,  tuD  gli  oggeD  dipenden@  vengono  no@fica@  del  cambiamento  avvenuto  e  possono  aggiornarsi.  

•  Single-­‐serving  Visitor  

Page 31: Design patterns - parte 1

Pa>ern  comportamentali  •  State  ("stato")  perme>e  ad  un  ogge>o  di  cambiare  il  suo  comportamento  

al  cambiare  di  un  suo  stato  interno.  •  Lo  Strategy  ("strategia")  è  u@le  in  quelle  situazioni  dove  è  necessario  

modificare  dinamicamente  gli  algoritmi  u@lizza@  da  un'applicazione.  •  Il  Template  method  ("metodo  schema")  perme>e  di  definire  la  stru>ura  di  

un  algoritmo  lasciando  alle  so>oclassi  il  compito  di  implementarne  alcuni  passi  come  preferiscono.  

•  Il  Visitor  ("visitatore")  perme>e  di  separare  un  algoritmo  dalla  stru>ura  di  oggeD  compos@  a  cui  è  applicato,  in  modo  da  poter  aggiungere  nuovi  comportamen@  senza  dover  modificare  la  stru>ura  stessa.  

Page 32: Design patterns - parte 1

Design  Pa>erns  :  GoF  •  The  Sacred  Elements  of  the  Faith  

Page 33: Design patterns - parte 1
Page 34: Design patterns - parte 1

Design  Pa>erns  everywhere  

Page 35: Design patterns - parte 1

PATTERN  CREAZIONALI  

Page 36: Design patterns - parte 1
Page 37: Design patterns - parte 1

SINGLETON  Gof  pag.  117  

Page 38: Design patterns - parte 1

Singleton  

Descrizione  •  Il  Singleton  è  un  design  pa>ern  creazionale  che  ha  lo  scopo  di  

garan@re  che  di  una  determinata  classe  venga  creata  una  e  una  sola  istanza,  e  di  fornire  un  punto  di  accesso  globale  a  tale  istanza.  

Page 39: Design patterns - parte 1

Singleton  

Esempio  •  Un  applica@vo  deve  istanziare  un  ogge>o  che  ges@sce  una  

stampante.  Questo  ogge>o  deve  essere  unico,  vale  dire,  deve  esserci  soltanto  una  sola  istanza  di  esso,  altrimen@,  potrebbero  risultare  dei  problemi  nella  ges@one  della  risorsa.    

•  Il  problema  è  la  definizione  di  una  classe  che  garan@sca  la  creazione  di  un'unica  istanza  all’interno  del  programma.    

Page 40: Design patterns - parte 1

Singleton  

Problema  •  Bisogna  garan@re  che  la  classe  abbia  un’unica  istanza,  

accessibile  a>raverso  un  unico  punto  di  ingresso  alla  classe  stessa.  

•  Tipicamente  questo  si  verifica  quando  la  classe  man@ene  informazioni  che  devono  essere  condivise  da  più  par@  dell’applicazione  e  non  è  corre>o  oppure  non  è  efficiente  che  queste  informazioni  siano  duplicate    

Page 41: Design patterns - parte 1

Singleton  

Soluzione  •  Il  “Singleton”  pa>ern  definisce  una  classe  della  quale  è  

possibile  la  istanziazione  di  un  unico  ogge>o,  tramite  l’invocazione  a  un  metodo  della  classe,  incaricato  della  produzione  degli  oggeD.  

•  Le  diverse  richieste  di  istanziazione,  comportano  la  res@tuzione  di  un  riferimento  allo  stesso  ogge>o.    

Page 42: Design patterns - parte 1

Singleton  

Soluzione  •  Si  rende  il  costru>ore  della  classe  privato,  in  modo  che  non  

sia  possibile  creare  dire>amente  istanze  di  tale  classe.  •  La  classe  viene  dotata  di  un  metodo  sta?c  per  o>enere  

un’unica  istanza,  che  viene  memorizzata  in  un  campo  sta?c  privato  della  classe  stessa.  Tu>avia  possono  esserci  alcune  variazioni  a  tale  soluzione:    –  l’istanza  può  essere  creata  all’inizializzazione  del  programma,  oppure  la  prima  volta  che  viene  richiesta    

–  l’istanza  può  appartenere  a  una  so>o  classe  della  classe  singleton  (come  accade  nel  Factory  Method)  

Page 43: Design patterns - parte 1

Singleton  

Stru*ura    

Page 44: Design patterns - parte 1

Singleton  

Schema  del  modello  •  Si  presenta  di  seguito  una  delle  implementazioni  più  semplici  

del  Singleton:    

   

Page 45: Design patterns - parte 1

Singleton  

PartecipanJ  •  Singleton:  classe  PrinterSpooler.    

–  Definisce  un  metodo  getInstance  che  res@tuisce  un  riferimento  alla  unica  istanza  di  se  stessa.    

–  E’  responsabile  della  creazione  della  propria  unica  istanza.    

 

Page 46: Design patterns - parte 1

Singleton  

Implementazione  •  L'implementazione  più  semplice  di  questo  pa>ern  prevede  

che  la  classe  singleton  abbia  un  unico  costru>ore  privato,  in  modo  da  impedire  l'istanziazione  dire>a  della  classe.  

 

Page 47: Design patterns - parte 1

Singleton  

Implementazione    

 

Page 48: Design patterns - parte 1

Singleton  

Implementazione  mulJ-­‐thread  •  In  applicazioni  mul@-­‐thread  l'u@lizzo  di  questo  pa>ern  con  la  

lazy  ini?aliza?on  richiede  un'a>enzione  par@colare:  se  due  thread  tentano  di  eseguire  contemporaneamente  il  costru>ore  quando  la  classe  non  è  stata  ancora  istanziata,  devono  entrambi  controllare  se  l'istanza  esiste  e  soltanto  uno  deve  creare  la  nuova  istanza.  

 

Page 49: Design patterns - parte 1

Singleton  

Sincronizzazione  esplicita  •  Il  modo  più  semplice  per  implementare  una  versione  thread-­‐

safe  è  quello  di  usare  un  meccanismo  di  sincronizzazione  come  quello  fornito  dalla  parola  chiave  synchronized  di  Java.  

•  Tu>avia  questo  approccio  è  inefficiente:  infaD  la  sincronizzazione  è  u@le  solo  per  la  prima  inizializzazione,  e  cos@tuisce  un  inu@le  overhead  nelle  successive  chiamate  al  metodo  getter.    

 

Page 50: Design patterns - parte 1

Singleton  

Sincronizzazione  esplicita    

 

Page 51: Design patterns - parte 1

Singleton  

Sincronizzazione  implicita  •  In  alcuni  linguaggi  è  possibile  evitare  l'overhead  di  

sincronizzazione  sfru>ando  quelle  peculiarità  della  lazy  ini?aliza?on  che  consentono  di  assicurarsi  la  presenza  del  singleton  in  memoria  all'a>o  del  suo  u@lizzo.  

•  Le  modalità  specifiche  possono  variare  da  linguaggio  a  linguaggio;  ad  esempio,  in  Java  è  possibile  sfru>are  il  fa>o  che  l'inizializzazione  di  una  classe  ed  il  suo  caricamento  in  memoria,  quando  avvengono,  sono  operazioni  thread-­‐safe  che  comprendono  l'inizializzazione  di  tu>e  le  variabili  sta@che  (a>ribu@)  della  classe  stessa.  

 

Page 52: Design patterns - parte 1

Singleton  

Sincronizzazione  implicita    

 

Page 53: Design patterns - parte 1

Singleton  

Conseguenze  •  Con  il  singleton  si  ha  che:    

–  l’accesso  alla  classe  è  controllato  e  avviene  a>raverso  l’unica  istanza  che  può  essere  creata    

–  non  occorre  introdurre  variabili  globali  per  accedere  all’unica  istanza    

–  è  semplice  estendere  la  classe  singleton  senza  modificare  il  codice  che  usa    

–  è  semplice  passare  da  una  singola  istanza  a  più  istanze    

 

Page 54: Design patterns - parte 1

Singleton  

CriJche  •  Alcuni  autori  hanno  cri@cato  il  pa>ern  Singleton,  osservando  

che,  con  opportune  modifiche  stru>urali,  una  istanza  singola  può  entrare  più  efficacemente  a  far  parte  dell'Ambiente  globale  dell'applicazione  

Page 55: Design patterns - parte 1

ENTERPRISE  PATTERN  

Page 56: Design patterns - parte 1

Enterprise  Pa>erns  •  Pa>erns  of  Enterprise  Applica@on  Architecture  •  Core  J2EE  Pa>erns  •  Integra@on  Pa>erns  

Page 57: Design patterns - parte 1

Enterprise  Pa>erns  >  books  

Page 58: Design patterns - parte 1
Page 59: Design patterns - parte 1

Core  J2EE  Pa>erns  •  Presenta@on  Tier  •  Business  Tier  •  Integra@on  Tier  

Page 60: Design patterns - parte 1

Core  J2EE  Pa>erns  •  Presenta@on  Tier  

–  Applica@on  Controller  –  Composite  View  –  Context  Object  –  Dispatcher  View  –  Front  Controller  –  Intercep@ng  Filter  –  Service  To  Worker  –  View  Helper  

Page 61: Design patterns - parte 1

Core  J2EE  Pa>erns  •  Business  Tier  

–  Applica@on  Service  –  Business  Delegate  –  Business  Object  –  Composite  En@ty  –  Service  Locator  –  Session  Façade  –  Transfer  Object  (DTO)  –  Transfer  Object  Assembler  –  Value  List  Handler  

Page 62: Design patterns - parte 1

Core  J2EE  Pa>erns  •  Integra@on  Tier  

–  Data  Access  Object  (DAO)  –  Domain  Store  –  Service  Ac@vator  –  Web  Service  Broker  

Page 63: Design patterns - parte 1

Presenta@on  Tier  Pa>ern  –  Applica@on  Controller  –  Composite  View  –  Context  Object  –  Dispatcher  View  –  Front  Controller  –  Intercep@ng  Filter  –  Service  To  Worker  –  View  Helper  

Page 64: Design patterns - parte 1

FRONT  CONTROLLER  PoEAA  -­‐  pag.  117  

Page 65: Design patterns - parte 1

FRONT  CONTROLLER  

Page 66: Design patterns - parte 1

FRONT CONTROLLER !

Page 67: Design patterns - parte 1

Front  Controller  

Descrizione  •  Consente  di  ges@re  il  mapping  logico  delle  risorse    

Page 68: Design patterns - parte 1

Front  Controller  

Problema  •  Si  vuole  fornire  un  punto  di  accesso  centralizzato  per  la  

ges@one  delle  richieste  al  livello  dello  strato  di  presentazione,  in  modo  da  sparare  la  logica  di  presentazione  da  quella  di  processamento  delle  richieste  stesse.  

•  Inoltre  si  vuole  evitare  di  avere  del  codice  duplicato  e  si  vuole  applicare  una  logica  comune  a  più  richieste.    

Page 69: Design patterns - parte 1

Front  Controller  

Soluzione  •  Si  u@lizza  un  Front  Controller  come  punto  di  accesso  iniziale  

per  ges@re  tu>e  le  richieste  connesse  tra  loro.  •  Il  Front  Controller  centralizza  la  logica  di  controllo  che  

dovrebbe  altrimen@  essere  replicata  per  ogni  richiesta.    

Page 70: Design patterns - parte 1

Front  Controller  Avoid: •  Physical Resource Mapping •  Unhandled Mapping in Multyplexed Resource Mapping

strategy •  Logging of Arbitrary HTTTP Parameters •  Duplicating Common Logic Across Multiple Front Controllers

Use to Implement: •  Logical Resource Mapping •  Session Management •  Audit Logging

Avoid: •  Invoking Commands Without Sufficient Authorization

Page 71: Design patterns - parte 1

Front  Controller  

Page 72: Design patterns - parte 1

Front  Controller  

Page 73: Design patterns - parte 1

Front  Controller  

Page 74: Design patterns - parte 1

Front  Controller  

Conseguenze  •  Le  conseguenze  che  derivano  dall’u@lizzo  di  tale  pa>ern  sono:  

–  centralizzazione  del  controllo  –  miglioramento  della  riusabilità  –  miglioramento  della  manutenibilità  –  separazione  dei  ruoli  all’interno  dell’applicazione