Object-Rela+onal Mapping - Programmazione di Applicazioni...

39
Object-Rela+onal Mapping Object-Rela+onal Mapping Programmazione di Applicazioni Data Intensive Laurea in Ingegneria e Scienze Informa+che DISI – Università di Bologna, Cesena G. Domeniconi, G. Moro, R. Pasolini DISI Università di Bologna, Cesena [email protected]

Transcript of Object-Rela+onal Mapping - Programmazione di Applicazioni...

Page 1: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Object-Rela+onalMapping

ProgrammazionediApplicazioniDataIntensive

LaureainIngegneriaeScienzeInforma+cheDISI–UniversitàdiBologna,Cesena

G.Domeniconi,G.Moro,R.PasoliniDISIUniversitàdiBologna,Cesena

[email protected]

Page 2: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ApproccioObject-Orientedepersistenza

•  IlparadigmaObject-Oriented(OO)èl'approcciopiùcomunementeuKlizzatopersviluppareapplicazionimoderne–  BasatosuoggeLchesiscambianomessaggi(chiamateametodi)–  UsatodailinguaggimodernipiùuKlizzaK(Java,C#,Python,...)

•  Durantel’esecuzionediunprogramma,glioggeLsonoresidenKnellamemoriavolaKle(RAM)–  Quandol’applicazioneterminavengonopersi

•  LeappplicazionirealidevonogesKreanchedaKpersisten:–  QuesKdaKdevonosopravvivereallaterminazionedelleapplicazioni

peresseredisponibilinelleesecuzionisuccessive–  Nelleapplicazioniweb,nondevonoperdersidaKtrarichiesteoin

seguitoadunriavviodelserver(ades.amanutenzioneoguasto)

2DataIntensiveApplicaKons

Page 3: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Esempio:unOrdineObject-Oriented

•  Tramitelanostrawebapp,unutentepuòeffe\uareordini•  NelparadigmaOO,unordineèunogge\ocompostocon

riferimenKadaltrioggeL:l’utente,iprodoLacquistaK,...•  Ogniogge\oordineeisuoicomponenKdevonoessere

disponibiliinesecuzionisuccessivedell’applicaione

Invoice

user

26/5/14

2034290

date

oid

items

User... Set ... ...

InvoiceEntry

1quanKty

item

Product...

Bulworth[VHS]name

3DataIntensiveApplicaKons

Page 4: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Persistenza:DatabaseadOggeL?

•  IDBMSadoggeLimplementanoilparadigmaobject-orientedrappresentandol'informazionecomeneilinguaggiOO–  EsempidiOODBMS:db4o,perst,DTS/S1,...

•  L’usodiquesKDBMSperme\erebbedisalvareereperireoggeLpersistenKinmodoconformeallaOOP

ObjectDatabase db = ... Invoice order = ... db.store( order );

•  D’altraparte,nonostanteunastoriadisviluppopiùchedecennale,hannotrovatoscarsoimpiegocommerciale–  Nonesisteunostandardsull’interoperabilitàperdiversiOODBMS–  NonfornisconofunzionalitàconsolidateneiRDBMS,es.indiciavanzaK

Invoice... ......

4DataIntensiveApplicaKons

Page 5: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Persistenza:Serializzazione?

•  GlioggeLJavaopportunamenteconfiguraKpossonoessereserializzaKinunformatobinario...

•  ...esalvaK/recuperaKdaunmediumdimemoriapersistente,e.g.comefiledelfilesystemdiognisistemaoperaKvo

•  L’approcciorisolveconsemplicitàlapersistenzadeidaKtraesecuzionidisKntedell’applicazione

•  Maèina\uabileanchepermodestequanKtàdidaK,infaLqualsiasiaccessoadessirichiedeladeserializzazione–  Ades.percalcolareiltotaledegliordinidovremmodeserializzarlituL:

ilcostointerminiditempo(ememoria)sarebbeinaccetabile•  Inoltre,selaclassediunogge\ocambia,ilformatobinario

puòcambiare,invalidandoglioggeLgiàserializzaK

Invoice...

......

0011001101110010100110101011

5DataIntensiveApplicaKons

Page 6: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

DatabaseRelazionali

•  Idatabaserelazionalisonolasoluzionepiùado\atapermemorizzareconpersistenzagrandimassedidaKstru\uraK

•  IrelaKonaldatabasemanagementsystems(RDBMS)impieganoSQL,unlinguaggiodichiaraKvo–  basatosulmodellorelazionale,differentedaquelloadoggeLeda

altriparadigmicomunementeusaKneilinguaggidiprogrammazione

•  LamemorizzazionedeidaKavvieneindipendentementedall’applicazionecheviaccede(dataindependence)–  IdaKsonoingeneraleaccessibilidapiùapplicazioni,eventualmente

realizzateconlinguaggidiversiedanchebasaKsuparadigmidiversi

•  CiononostanteiRDBMSoggisonousaKpergaranKrelapersistenzaanchenelleapplicazioniobject-oriented

6DataIntensiveApplicaKons

Page 7: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

VantaggideiDatabaseRelazionali

IRDBMSnonpresentanoiproblemidellesoluzionidiscussenelleslideprecedenK(OODBMSeserializzazionedioggeL)•  Essendolargamentediffusi,hannoraggiuntooLmilivellidi

affidabilità,efficienzaestandardizzazione•  SonobasaKsulnotolinguaggiostandardSQL,cheèospitato

all’internodeilinguaggidiprogrammazionepiùcomuni–  garanKsceinteroperabilitàtradiversisonware

•  Offronofunzionifondamentaliperl’integritàeconsistenzadeidaKancheinmulK-utenza,comeades.letransazioniACID

•  IdaKsonoaccessibilidire\amentesullamemoriapersistente–  Sipossonosvolgereinmodomoltoefficienteinterrogazionie

operazionidiaggregazionecomplessesenzaportaretuLidaKinRAM

7DataIntensiveApplicaKons

Page 8: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ImpedanceMismatchProblem

•  Ilproblemanell’usodeiRDBMSpergesKredaKdiapplicazioniOOnascedallesostanzialidifferenzetraidueparadigmi–  NelparadigmaOOl’informazioneèmodellatainterminidioggeLcon

metodieconproprietàchepossonoessereriferimenKadaltrioggeL–  Ilmodellorelazionalerappresental’informazioneconrelazionitravalori

•  Impedancemismatchproblemèlanoncorrispondenzatraidueparadigmicheimpediscel’accessoaldbconformementeallaOOP–  inognisistemasonwarecherichiedepersistenzadeidaK,almenoil30%

delcodiceèdedicatoarisolverequestoproblema–  occorreunasoluzioneproge@ualeeimplementa+vachesiariusabile

Invoice...

......

???

8DataIntensiveApplicaKons

Page 9: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

DifferenzetraOOeModelloRelazionale(1)

•  Nozionediiden+tàtraidaK–  Nelmodellorelazionale,ogniistanzaèrappresentataconunatuplain

unatabellaesiidenKficaconunachiaveprimaria–  NeilinguaggiOO,cisonoduenozionidiidenKtà

•  fisica:basatasull’indirizzoinmemoriadeglioggeL(operatore==inJava)•  seman+ca:basatasulcontenutodeglioggeL(metodoequalsinJava)•  DueoggeLpossonoessereidenKcisemanKcamentemanonfisicamente

•  Modalitàdinavigazionea\raversoidaK–  NellaOOPlanavigazioneèproceduraletramiteriferimenKtraoggeL

(dovesonodefiniK)–  NelmodellorelazionaleèdichiaraKvomediantejointratabelle

DataIntensiveApplicaKons 9

Page 10: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

DifferenzetraOOeModelloRelazionale(2)

•  Coesione–  Tu\eleproprietàdiunogge\osonocontenutenell’ogge\ostesso

•  Un’istanzadellaclasseOrdineèunogge\ocheconKene(riferimenKa)unogge\oClienteed(unriferimentoad)unalistadioggeLDeLaglioordine,ciascunodeiqualiconKene(unriferimentoad)unogge\oProdoLo

–  IdaKrelazionalicorrispondenKadunastessaenKtàpossonoesseresuddivisiinpiùtabelle

•  UnOrdineèrappresentatodaunatuplanellatabellaOrdiniassociataadunatupladellatabellaClien+edassociataapiùtupledellatabellaDeLaglioordine,ognunaassociataadunatupladellatabellaProdoN

•  Incapsulamento–  Inunogge\o,lalogicapermanipolareipropridaKrisiedeneimetodi

dell’ogge\ostesso–  IdaKrelazionalielalogicaperelaborarlisonoseparaK

DataIntensiveApplicaKons 10

Page 11: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

DifferenzetraOOeModelloRelazionale(3)

•  NellaOOPsipossonodefinire+pididatocompos+dicomplessitàarbitraria,inveceinSQLstandardsoloKpiprimiKvi–  KpicomposKOOPsonoclassiconunoopiùa\ribuKnonprimiKvi

•  OOsupportaiconceLdiereditarietàepolimorfismo–  IlinguaggiOOconsentonodidefinireclassicheneestendonoaltree

associazioniconclassigeneriche(astra\e)ointerfacce

•  QuestepossibilitànonsonoprevistedallostandardSQL–  AlcuniRDBMShannofunzionalitàavanzateperquesKscopi–  Ades.PostgreSQLsupportaKpididatocomposKedereditarietàtra

tabelle–  Tu\aviaquestecara\erisKchenonsonostandardesonoperciò

incompaKbilitradifferenKRDBMSDataIntensiveApplicaKons 11

Page 12: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Object-RelaKonalMapping

•  Conobject-rela:onalmapping(ORM)cisiriferisceadunasoluzioneproge\ualeeimplementaKvaperrisolverel’impedancemismatchtraiparadigmiOOerelazionale

•  GaranKscenelcontempol’astrazionedallecara\erisKcheimplementaKvedellospecificoRDBMSuKlizzato

•  MedianteORMsispecificalacorrispondenzatraildominiodeglioggeLdell’applicazioneelabasedidaKrelazionale–  Siindividuanonell’applicazioneleclassicorrispondenKadoggeLdi

Kpopersistente–  Siassociano/mappanoquesteclassiatabellenelRDBMS–  Sidefinisconooperazionicheincapsulanole\uraescri\uraditali

oggeLneldatabaseso\ostante

DataIntensiveApplicaKons 12

Page 13: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

CorrispondenzatraClassieTabelle

•  L’ORMsibasasull’associazionediciascunaclassedioggeLpersistenKadunatabelladeldatabase

•  Unogge\oèparzialmenterappresentatodaunatuplanellatabellacheinfaLnoncontemplairelaKvimetodi

public class User { ... private int id private String name public int getId() {…} public void setId(…) {…} public String getName() {…} public void setName(…) {…} ...

}

ParadigmaOO RDBMS

id name ...

1 bobby ...

3 tom86 ...

... ... ...

id = 1 name = bobby ...

id = 3 name = tom86 ...

13DataIntensiveApplicaKons

Page 14: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

OggeLPersistenK

•  Definiamopersistenteunogge\oacuicorrispondeunatuplaneldatabase,nellatabellacorrispondenteallasuaclasse–  Unogge\odellastessaclassepuòancheesserenonpersistente,nelcaso

nonsiastato(ancora)salvatoneldatabase•  InJavaunogge\opersistenteèspessounbean(vedilezione

precedente)compostodaproprietàconnomieKpidefiniK–  PerogniproprietàpropsonodefiniKimetodigetPropesetProp

•  Adogniproprietàcorrisponde,sullatabelladeldatabase:–  unsingoloa\ributoavaloriprimiKviedoggeLsemplici(int,String,

…)concorrispondenKKpiSQL(INTEGER,VARCHAR,…)•  lachiaveprimariaèinclusatraleproprietà

–  piùa\ribuK(ancheinaltretabelle)peroggeLcomposiKchesonoparteintegrantedell’ogge\opersistente

–  a\ribuKconchiaviesterneperassociazioniconaltrioggeLpersistenK(integritàreferenziale)

DataIntensiveApplicaKons 14

Page 15: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Associazionietra\amentonell’ORM

•  InambitoORMleassociazionitraclassipersistenKsonotra\ateanalogamentealleassociazioninelmodelloER–  un’associazionebinariatraclassipersisten+AeBdeterminarelazioni

traoggeLpersisten+delledueclassi–  esempi:unordine(classeA)èemessodaunutente(classeB),

unprodo\o(A)apparKeneaduninsiemedicategorie(B),ognicategoria(A)puòavereunacategoria(B=A)padre(i.e.anello)

•  Un’associazionecomportaingeneralelapresenzanellaclasseAdiunaproprietàpilcuiKpoèB(ounacollezionediB)

•  Esistonoingeneraleancheassociazionin-arie,cioètranclassi•  LeassociazionisonogesKteadeguatamentedall’ORM

–  Es.:serecuperounogge\opersistenteemodificounogge\oadessoassociato,occorrerifle\erequestoaggiornamentoanchenelDB

15DataIntensiveApplicaKons

Page 16: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

17

EsempidiAssociazionieCardinalità

•  esistono anche altre associazioni, già trattate nel corso di ingegneria del software, riconducibili in termini di mapping alle precedenti –  aggregazione e composizione, ereditarietà ...

Società Nome indirizzo

Persona Nome Indirizzo Codice fiscale Data di nascita

* Datore lavoro

impiegato

1

Persona Nome Indirizzo Codice fiscale Data di nascita

marito

moglie dirigente

dipendente

0..1

0..1

0..1

*

persona casa * città possiede

poligono segmenti 3..*

punto ha lati

Situata in

1..*

*

1..* 0..1

* 2

DataIntensiveApplicaKons

Page 17: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ORMdiassociazioneuno-a-mol+:latouno

•  E.g.ogniordine(A)èemessodaunsoloutente(B)•  l’associazioneètrado\aconunaproprietàinAdiKpoBossiauser;

ogniuser(B)puòessere“puntato”dapiùordini(A)

•  Neldb,questosirappresentaconuna\ributonellatabellaAchiaveesternadellatabellaB(user_idèforeignkey,idèPK)

iduser

123

iduser

234idname

1bobby

id name …

1 bobby …

2 tom86 …

… … …

id user_id …

123 1 …

234 1 …

… … …

ordini

utenti

A B

A B

18DataIntensiveApplicaKons

ordine user

ordine

Page 18: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

NavigabilitàdelleAssociazioni

•  LeassociazionibinarietraenKtàsonodefiniteinduedirezioni–  Es.:adogniordine(A)èassociatol’utente(B)chel’haemessoeadogni

utente(B)sonoassociaKgliordini(A)chehaeseguito•  NeiRDBMS,leassociazionisononavigabilibidirezionalmente

–  Possiamosapereviaqueryqualeutentehaemessoundatoordine(A→B)equaliordinisonostaKemessidaundatoutente(B→A)

–  ciòavvienepoichéinogniordineèpresentel’IDdell’utentechelohaemessoedSQLrisolvel’associazioneconmatchdivaloriviajoin

•  InOOlanavigabilitàdelleassociazionidipendedalleproprietàincorporatenelleclassi–  e.g.ogniogge\oInvoice(ordine)haunrif.adunoUser(utente)–  PeravereanchegliordinidiogniutenteoccorreunaproprietànellaclasseUser

–  Inquestocaso,secambiol’utenteassociatoadunordineconaltroutente,occorreaggiornareanchei2insiemidiordinipuntaKdai2utenK

19DataIntensiveApplicaKons

Page 19: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ORMdiassociazioneuno-a-mol+:latomol:

•  Es.:adogniutente(B)èassociatol’insiemedeisuoiordini(A)•  L’associazioneètrado\aconunaproprietàordersnellaclasse

user(B)chehapervaloreunsetdiordini(diclasseA)•  Inquestomodol’associazioneutenK-ordiniènavigabile

bidirezionalmente id

name1

bobby

orders

iduser

123

iduser

234

•  CiògaranKscelanavigabilitàdeglioggeLcomenelDB–  comerisalireagliordinidiunutentesenzalaproprietàorders,?

B A

20DataIntensiveApplicaKons

user

orders

Page 20: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ORMdiassociazionemolK-a-molK

•  Es.:ogniprodoLo(A)puòappartenereapiùcategorie(B)eviceversa

•  Pernavigarel’associazionebidirezionalmentesicreaunaproprietàdiKposetsiainB,siainA,comenellaslideprecedente

idname

1234Amovie

idname

2345Amusical

labels

labels

idname

12Movies

idname

23Music

items

items

A B

21DataIntensiveApplicaKons

products category

Page 21: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ORMdiassociazionemolK-a-molKneldb

•  UnarelazionemolK-a-molKsirappresentaingenereinundatabaserelazionaletramiteunatabelladijoin–  LatabellaconKenecoppiedichiavidiAeB–  InquestomodosonorappresentateinsiemesialarelazionemolK-a-

molKdaAaBchequelladaBadA–  Letabelledijoinsipossonoancheusareperassociazioniuno-a-molK

id name …

12 Movies …

23 Music …

… … …

id name …

1234 A movie …

2345 A musical …

… … …

product category prod_id cat_id

1234 12

2345 12

2345 23

… …

labels

22DataIntensiveApplicaKons

Page 22: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ORM:funzionalitàeproblemidarisolvere

•  L’ORMdeveingeneralefornirefunzionalitàper–  leggereleinformazionidioggeLpersistenKdaldatabase–  scrivereneldatabaseicambiamenKapportaKadoggeL

persistenK,inserendo,aggiornandoedeliminandorighe

•  EsistonodiversiaspeLcriKcidagesKre–  SerecuperolastessatupladalDBpiùvolte,possoo\enerepiùoggeL

fisicichelarappresentano→possibiliinconsistenze–  PerrecuperareoggeLassociaKpossonoservirejoinoulterioriquery,

maglioggeLpotrebberononserviree/oesseregiàreperiK–  Inassociazionibidirezionalipossonocrearsiinconsistenzetraivaloridi

dueproprietàcorrispondenK

•  PeruKlizzareunasoluzioneORMoccorreseguirealcuniaccorgimenKnonbanaliperchéfunzionicorre\amente

DataIntensiveApplicaKons 23

RDBMS

OOORM

Page 23: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Evitareaccoppiamentotraapplicazioneedb

•  icomponenKdiapplicazionichedevonotra\aredaKpersistenKpossonousareleAPIdeldatasource–  e.g.componenKdelmodelcomejavabean,opagineJSP

delviewoservletcherealizzanocontroller•  tu\aviaciòintroducestre\oaccoppiamentotraquesK

componenKeildatasourceconconseguenzenegaKve:–  aumentalacomplessitàdimigrazionedell’applicazionedaundata

sourceadunaltro–  seavvengonocambiamenKneldatasource,quesKcomponenK

devonoalorovoltasubiremodifiche•  l’ORMdeveaumentarel’indipendenzadell’applicazionedal

datasourceancheperchépuòassumerevarieforme:–  RDBMS,servizioB2Bexchangeesterno,LDAPdatabase,business

serviceaccessibileviaCORBAInternetInter-ORBProtocolosockets

DataIntensiveApplicaKons 24

RDBMS

OOORM

Page 24: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

TreApprocciORM

•  consideriamoun’applicazioneincuidevonoesseregesKKdaKpersistenKa\raversoORM

•  Rifacendosialpa\ernmodel-view-controller,progeLamol’applicazioneaffinchésiacompostadaclassiche–  rappresentanoiconceLdeldominio(model)–  incapsulanolabusinesslogicdall’applicazione(controller)–  implementanol’interfacciaperl’utente(view)

•  Esistonotreprincipaliapprocciall’ORM–  integrazionenelleclassiesistenKdimodelecontroller(forzabruta)–  creazionediunostratodiastrazionespecificoall’applicazione(DAO,

usatofinoranell’applicazione)–  usodiunframeworkORMperlapersistenzachefa\orizzafunzionalità

dipersistenzarendendoleriusabiliperdifferenKprogeLsonware

DataIntensiveApplicaKons 25

Page 25: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Archite\uradiun’applicazionesenzaORM

Presentazione(view)

Logicadibusiness(controller)

ConceLdeldominio(model)

DriveraccessoRDBMS(es.JDBC)

RDBMS

Codicedell’applicazione

???

26DataIntensiveApplicaKons

ilproge\oeilcodicenoncontemplanostrategiedimappingtraclassi,oggeLedb.L’interazioneconildbèsparsanelcodiceooconnotevoliproblemidimanutenibilitàesenzapossibilitàdiriuKlizzo.

Page 26: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ORMtramite“forzabruta”

•  Nell’approccioa“forzabruta”,l’ORMèdefinitomaèintegratonelleclassideldominio(model)edicontrollo

•  Questeclassisonocosìdire\amenteresponsabilidell’interazionecoldatabase–  costruzionedicomandiequerySQL–  interazionecoldriver(JDBC)–  interpretazionedeirisultaK

•  PerquestoapprocciononesistonostandardbendefiniK–  API,implementazioneeregoledaseguireperl’usodipendono

largamentedallesceltediprogeLsKesviluppatoridellespecificheapplicazioni

27DataIntensiveApplicaKons

Page 27: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Archite\uraconORMaforzabruta

Presentazione(view)

Logicadibusiness(controller)

ConceLdeldominio(model)

DriveraccessoRDBMS(es.JDBC)RDBMS

ORM

ORM

Codicedell’applicazione

28DataIntensiveApplicaKons

ilproge\oeilcodicecontemplanostrategiedimappingtraclassi,oggeLedb,tu\avial’interazioneconildbèincorporatanelleclassimodelecontroller.Menoproblemidimanutenibilità,maancoraimpossibilitàdiriuKlizzo.

Page 28: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ORMintegratonelModel:Esempiopublic class Invoice {

campi, getter e setter...

int id;

/** Carica dal database i dati dell’ordine con ID impostato. */

public void loadFromDB() throws SQLException {

try ( Connection conn = ... ) {

try (PreparedStatement ps = conn.prepareStatement( "SELECT ..." ) {

ps.setInt( 1, id );

try ( ResultSet rs: ps.executeQuery() ) {

if ( !rs.next() ) return;

// uso il metodo omologo di User per caricare i dati dell’utente

user = new User();

user.setId( rs.getInt( "user_oid" ) );

user.loadFromDB();

gestione altri campi...

} } }

}

/** Salva sul database i dati di questo ordine. */

public void writeToDB() throws SQLException { ... }

} 29DataIntensiveApplicaKons

Inquestomodo,perreperireunogge\odalDB,ilcontrollerdevecreareunogge\o“vuoto”,impostarel’IDdellatupladacaricareechiamarequestometodo

Page 29: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ORMintegratonelController:Esempio/** Carica dal database e presenta gli ordini di un utente */

public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

User user = getCurrentUser();

List<Invoice> orders = new ArrayList<>();

try ( Connection conn = ... ) {

try ( PreparedStatement ps: conn.prepareStatement( "SELECT ..." ) ) {

ps.setInt( 1, user.getId() );

try ( ResultSet res = ps.executeQuery() ) {

while ( res.next() ) {

Invoice order = new Invoice();

order.setId( res.getInt( "oid" );

gestione altri campi...

orders.add( order );

}

}

}

}

request.setAttribute( "orders", orders );

request.getRequestDispatcher( "WEB-INF/view/UserProfile.jsp" ) .forward( request, response );

} 30DataIntensiveApplicaKons

IlcontrollercreaunoperunoglioggeLordinicorrispondenK

alletupledelDB

Page 30: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ORMtramite“forzabruta”:pregiedifeL

•  Pro:èl’approcciopiùdire\o–  semplice(conce\ualmente)daimplementare–  efficientenell’esecuzione

•  sipuòdecidere,inbaseallanecessità,serecuperareomenoancheglioggeLassociaKaquellirecuperaKdaldb

–  siada\ameglioadesigenzespecifiche(es.databasemalproge\aK)

•  Contro:piùdifficiledagesKre–  lalogicadiaccessoaidaKsimescolacolrestodell’applicazione–  maggioreaccoppiamentotraDBeapplicazione:modifichealDB

possonorichiedereintervenKsudiverseparKdell’applicazione–  richiedeingeneralepiùcodice,spessoripeKKvo,rispe\oadaltre

soluzioni

•  Ada\osolopermodellideidaKmoltosemplici31DataIntensiveApplicaKons

Page 31: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

DAO:layerdigesKonedellapersistenza

•  Perapplicazionipiùcomplesse,èopportunoincapsulareleinterazionicoldbinunlayerapposito,unadapter–  raccogliendocosìilcodiceORMinuncomponente–  Unasoluzionesempliceconsistenell’implementareunostrato

specificoperlapropriaapplicazione

•  IllayerècosKtuitodaunoopiùDataAccessObject(DAO)–  IDAOsonoun’astrazionedeldatabase:siinterfaccianoconesso

inviandocomandi/querySQLeinterpretandoneirisultaK–  L’interfacciadeiDAOoffreoperazioniall’applicazioneperl’accessoai

daKchenonvarianoalvariaredeldatasourceedefiniscemetodicheacce\anoeresKtuisconooggeLdefiniKnelmodel

•  Ogniqualvoltal’applicazionedeverecuperareemodificareoggeLpersistenK,lofasemprea\raversoiDAO–  IDAOnascondonotuLide\aglideldatabaseallealtreclassi

32DataIntensiveApplicaKons

Page 32: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

ORMconlayerdigesKonedellapersistenzaDAO

Presentazione(view)

Logicadibusiness(controller)

ConceLdeldominio(model)

DriveraccessoRDBMS(es.JDBC)RDBMS

Persistenza(DataAccessObjects)

Codicedell’applicazione

33DataIntensiveApplicaKons

lestrategiedimappingtraclassi,oggeLedb,sonoincapsulatenelDAO.Miglioralamanutenibilitàeriusabilità,mailcodiceèripeKKvoedècomunqueacaricodeglisviluppatoridell’applicazione.

Page 33: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

DAO:vantaggiesvantaggi

•  L’usodeiDAOèuKleallaseparazionetralalogicadiaccessoaldatabaseeilrestodell’applicazione–  IDAOfornisconounacomodainterfacciadialtolivelloaicontroller–  ModificheinternealdatabaserichiedonomodifichesoloaiDAO

•  IDAOfornisconopoiglistessivantaggideimetodiforzabruta–  semplicitàconce\uale,efficienza,flessibilitàadesigenzespecifiche

•  Ilproblemacherimanenell’approccioDAOèlagrandequanKtàdicodicespessorichiestaperl’implementazione–  L’implementazionediunsingolometodoDAOpuòrichiederemolte

operazionielementariesplicitesuidriverdeldatabase–  Questeoperazionivannoriscri\eperognimetodo,perogniclasse–  IlDAOpuòcosKtuirelamaggioranzadelcodicedell’applicazione

DataIntensiveApplicaKons 55

Page 34: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Esempio:confrontotrailcontrollerpervisualizzareunordine(≈15righe)...

public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

int orderId = Integer.parseInt( request.getParameter("id") );

GeneralDAO dao = DataAccess.getGeneralDAO( request );

Invoice order = dao.getInvoice( orderId );

List<InvoiceEntry> items = new ArrayList<>(order.getEntries());

User currentUser = Session.getSessionManager(request).getCurrentUser();

if ( !order.getUser().equals(currentUser) ) {

response.sendError( HttpServletResponse.SC_UNAUTHORIZED );

return;

}

request.setAttribute( "order", order );

request.setAttribute( "items", items );

request.setAttribute("justPlaced", request.getParameter("new") != null);

request.getRequestDispatcher( "WEB-INF/view/OrderDetails.jsp" ) .forward( request, response );

}

56DataIntensiveApplicaKons

Page 35: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

...eilmetododelDAOchereperisceleinformazionidaldatabase(≈50righe)

static final SQL_INVOICE = "SELECT order_date, user_oid FROM estore.invoice WHERE oid=?";

static final SQL_INVOICE_ENTRIES = "SELECT i.oid, i.quantity, i.review_summary, i.review_text, i.score, p.oid, p.name, p.description, p.price FROM estore.invoice_item i JOIN estore.product p ON i.product_oid = p.oid WHERE i.invoice_oid=?";

@Override

public Invoice getInvoice( int id ) {

try {

Invoice invoice = new Invoice();

try ( PreparedStatement stmt =

conn.prepareStatement( SQL_INVOICE ) ) {

stmt.setInt( 1, id );

try ( ResultSet res = stmt.executeQuery() ) {

if ( !res.next() ) return null;

invoice.setId( id );

Calendar date = Calendar.getInstance();

date.setTime( res.getDate( 1 ) );

invoice.setDate( date );

invoice.setUser( getUser( res.getInt(2) ) );

}

}

try ( PreparedStatement stmt = conn.prepareStatement( SQL_INVOICE_ENTRIES ) ) {

stmt.setInt( 1, id );

try ( ResultSet res = stmt.executeQuery() ) {

HashSet<InvoiceEntry> entries = new HashSet<>();

while ( res.next() ) {

InvoiceEntry entry = new InvoiceEntry();

entry.setInvoice( invoice );

entry.setId( res.getInt(1) );

entry.setQuantity( res.getInt(2) );

String reviewSummary = res.getString(3);

if ( reviewSummary != null ) {

Review review = new Review();

review.setSummary( reviewSummary );

review.setText( res.getString(4) );

review.setScore( res.getInt(5) );

entry.setReview( review );

}

Product product = new Product();

product.setId( res.getInt(6) );

product.setName( res.getString(7) );

product.setDescription( res.getString(8) );

product.setPrice( res.getDouble(9) );

entry.setProduct( product );

entries.add( entry );

}

invoice.setEntries( entries );

}

}

return invoice;

} catch ( SQLException ex ) {

throw new DataAccessException( ex );

}

}

DataIntensiveApplicaKons 57

Page 36: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

GeneralizzazionedeimetodiDAO

•  Comediscussosopra,tu\eleimplementazionideiDAOsonobasatesuschemifissiricorrenK–  perreperireunogge\odaldatabase,ilDAOnecreaunonuovoene

impostaciascunaproprietàusandoidaKo\enuKdaunaquery–  persalvareunogge\oneldatabase,ilDAOneleggeivaloridelle

proprietàeliinserisceinuncomandoINSERT –  ecosìvia...

•  Sipossonoquindidelinearedelleprocedurevalideingeneralepergenerareedeseguireilcodicediquesteoperazioni

•  Questeprocedurepossonoessereapplicateinmodosimileperqualsiasiclassediqualsiasiproge\o–  Bastaconoscereleinformazioninecessariesulleclassi,suldatabasee

sucomesonocollegaKl’unoall’altroDataIntensiveApplicaKons 58

Page 37: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Frameworkperlapersistenza

•  IframeworkperlapersistenzasonostaKintrodoLpergesKreinmodoefficientel’object-relaKonalmapping

•  QuesKframeworkfornisconoimplementazionigenerichedeimeccanismisolitamenteusaKneiDAO–  studiateperfunzionaresuquanKpiùcasipossibili–  basatesubestprac+cescheoLmizzanol’affidabilitàel’efficienza

•  L’usodiquesKframeworkabba\eitempidisviluppo–  nonèpiùnecessarioimplementaremanualmenteDAOcomplessi

•  Chirealizzal’applicazionedevelimitarsia–  configurareilframeworkperspecificarelecorrispondenzetraleclassi

eletabelledeldatabasespecifichedellapropriaapplicazione–  usareleAPIdialtolivellodelframeworkperleggereescriveredaK

59DataIntensiveApplicaKons

Page 38: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Archite\uraconframeworkORM

Presentazione(view)

Logicadibusiness(controller)

ConceLdeldominio(model)

DriveraccessoRDBMS(es.JDBC)

RDBMS

Frameworkpersistenza

Codicedell’applicazione

configurazioneORM

60DataIntensiveApplicaKons

offretuLivantaggideiDAOedeliminailproblemadellaquanKtàeripeKKvitàdelcodiceacaricodeglisviluppatori

Page 39: Object-Rela+onal Mapping - Programmazione di Applicazioni ...dia.apice.unibo.it/download/slides/03-orm-lezione_1x_2016_2017.pdfObject-Rela+onal Mapping Programmazione di Applicazioni

Object-Rela+onalMapping

Frameworkperlapersistenza:pregiedifeL

•  L’usodiunframeworkgaranKscedeivantaggiimportanK–  l’APIdelframeworkdaunaccessofacileallefunzionalità–  sollevaglisviluppatoridalcurarelalogicadiaccessoaldatabase–  ilframeworkoffresoluzionivalideinmolKcontesKebentestate–  èfacilecambiareilmappingtraoggeLetabelle:bastacambiarela

configurazione

•  Però–  richiedecheildatabasesiabenproge\atoperconsenKreilmapping–  leprestazionipossonononessereoLmalirispe\oadunasoluzione

sviluppataadhocperl’applicazione•  tu\aviailframeworkpuòoffrireoLmizzazioninonbanalidaimplementare,ades.cachingdeglioggeLinmemoriaRAM,transazionietc.

61DataIntensiveApplicaKons