SlideShare a Scribd company logo
1 of 41
Alessandro Forte
        SW Architect @ T&C Group
                      MCP – MCTS
http://www.alessandroforte.it/blog
           info@alessandroforte.it
Alessandro Forte
                         Software Architect @ T&C Group

                                                                DotNetCampan
                                                                  ia Founder


                     Contatti
WebSite: http://www.alessandroforte.it/
Blog: http://www.alessandroforte.it/blog/
E-Mail: informazioni@alessandroforte.it

                Prossimo Speech
   BBCC - Biology, Bioinformatics and Computation in
            Campania Napoli, 27/09/2012


                                                       Compra il mio libro
Agenda della giornata:
o  ORMs
    o   OR Impedance Mismatch
o   DAL
o   Entity Framework
    o   DEMO (Creiamo un EDM)
    o   DEMO (Consumiamo un EDM)
o   QAT
“Object-relational mapping (ORM, O/RM, and O/R mapping) in
computer software is a programming technique in which a metadata
descriptor is used to connect object code to a relational database”.
Object code is written in object-oriented programming (OOP) languages
such as Java or C#.

Gli Oggetti sono GERARCHICI             I Database sono RELAZIONALI
“Object-Relational Impedance Mismatch” è un modo elegante di dire che
gli Object Models e i Relational Models non lavorano molto bene tra di
loro.


Gli RDBMSs rappresentano I dati in un “formato tabellare”, mentre I
linguaggi di programmazione object-oriented, come Java e C#,
rappresentano I dati come “grafi di oggetti” interconnessi tra di loro.


Il caricamento e la memorizzazione di grafi di oggetti usando la
notazione tabellare dei database relazionali ci espone ad almeno 5
problemi di “disallineamento”
1)   Granularity
Spesso ci troviamo nel caso in cui il nostro Object Model ha (mappa) più
classi rispetto al numero corrispondente di tabelle nel database.



 public class Teacher{


 }

 public class School{

 }
1)   Granularity
2)   Inheritance
L’ereditarietà è un paradigma “naturale” nei linguaggi di programmazione
orientati agli oggetti.
Negli RDBMS invece non abbiamo nulla che possa essere paragonato al
concetto di ereditarietà.


              User

                                                    Inheritance
    Student          Teacher
1)   Granularity
2)   Inheritance
3)   Identity
Un RDBMS definisce esattamente una ed una sola nozione di «identità»



                                    Teacher_id = 2233

   Thread 1    Teacher




   Thread 2    Teacher
1)   Granularity
2)   Inheritance
3)   Identity
4)   Associations
Le associazioni sono rappresentate come un riferimento unidirezionale nei
linguaggi orientanti agli oggetti. Infatti se si necessita di una relazione
“bidirezionale”, è necessario definire due volte l’associazione.
Gli RDBMS invece utilizzano il concetto delle Foreign Keys che è
intrinsecamente bi-direzionale.

           Class user_main {

           Teacher teacher;

           }

           Class Teacher {

           }
1)   Granularity
2)   Inheritance
3)   Identity
4)   Associations
5)   Data Types
Una delle maggiori "differenze" tra i database relazionali e i linguaggi OO risiede nella
tipologia dei Tipi utilizzati.
Il modello relazionale infatti proibisce in maniera "stretta" attributi (o puntatori) per
referenza, al contrario di ciò che fanno invece i linguaggi OO.


                      String                              Varchar(150)

                         Date                             DateTime

                   Decimal                                Money
Caso emblematico è caratterizzato dal tipo Stringa.
Molti sistemi SQL costringono a definire per le stringhe una lunghezza massima,
mentre la maggior parte dei linguaggi OO dimensiona automaticamente le stringhe
con la memoria disponibile.
Object Relational Mapping, è una tecnica che
consente ai linguaggi di programmazione orientati agli
oggetti di lavorare “bene” con i database relazionali.

    Object world                   Relational
                                   world

          User
  Stu                  Mapping

             A…
    B..
   Esistono molti ORMs sul mercato
       LLBLGen Pro http://www.llblgen.com/
       Nhibernate http://www.hibernate.org/343.html
       EntitySpaces
         http://www.entityspaces.net/Portal/Default.aspx
       Open Access http://www.telerik.com/products/orm.aspx
       DevForce http://www.ideablade.com/
       XPO http://www.devexpress.com/Products/NET/ORM/
       Lightspeed
         http://www.mindscape.co.nz/products/LightSpeed/default
         .aspx
       e molti altri ancora…
   Non c’è un “vincitore” assoluto = gli ORM sono di “recente”
    utilizzo
    ◦ Nel 2003 erano presenti 31 .NET ORMs.
    ◦ Oggi ce ne sono alcuni cardine su cui si estendono gli altri….
   Typed Datasets (cough) – rilasciato nel 2002 
   ObjectSpaces “v1” – MAI rilasciato 
   ObjectSpaces “v2” – MAI rilasciato 
   Microsoft Business Framework – MAI rilasciato 
   WinFS – MAI rilasciato 
   Entity Framework 1
    ◦ LINQ to SQL – rilasciato nel Novembre del 2007 
       Visual Studio 2008 & .NET Framework 3.5
    ◦ LINQ to Entities – rilasciato nell’Agosto del 2008 
       Visual Studio 2008 SP1 & .NET Framework 3.5 SP1
   Entity Framework 4 – rilasciato nel Aprile del 2010 
    ◦ Visual Studio 2010 & .NET Framework 4.0

   Entity Framework 5 RC
    ◦ Visual Studio 2011 & .NET Framework 4.5 Beta
Demo – Orm … cosa avevate capito?
◦ Velocità di Sviluppo.
  Una su tutte…Elimina la scrittura di codice ripetitivo
   come il mapping dei campi di una query result sulle
   proprietà di un oggetto e viceversa.


◦ Supporto OO per l’incapsulamento delle business
  rules all’interno del proprio DAL (meglio BL ).
  Si scrivono (e si debuggano) le regole di business nel
   linguaggio di preferenza, invece di utilizzare “milioni”
   di trigger e “miliardi” di stored procedures.
◦ Rende l’accesso ai dati più astratto e portabile.
  Le classi di implementazione dell’ORM conoscono
   come scrivere vendor-specific SQL, così addio
   “traduzione”.


◦ Generazione di codice “standard” per le operazioni
  CRUD (Create, Read, Update, Delete).
  Alcuni ORM frameworks ispezionano direttamente I
   metadata dei database, leggono i metadata mapping
   files, e generano classi e metodi...
 Database con 300 tabelle…




• 1 tabella = 4 operazioni CRUD = 4 Sprocs
 300 tabella = 1200 operazioni CRUD = 1200 Sprocs
 Sapete cosa significa?




  • Fate voi … 
   Svantaggi di un ORM
    ◦ Bassa capacità di Interrogazione
      Genera un wrap di SQL (poco ottimizzabile)

    ◦ Riduzione del codice SQL
      Finché parliamo di CRUD è ok.
       Ma su query complesse l’SQL è più semplice.

    ◦ Lazy loading approach
      La tecnica è interessante di per sé…
      Invece l’esecuzione di SQL addizionale per recuperare
       le referenze a colonne di tabelle correlate è
       usualmente poco efficiente.
Agenda della giornata:
o  ORMs
    o   OR Impedance Mismatch
o   DAL
“A data access layer (DAL) in
computer software, is a layer
of a computer program which
provides simplified access
to data stored in persistent
storage of some kind, such as
an entity-relational database”
   Cos’è?
    ◦ E’ un tool (con annesso servizi) per creare un Entity
     Data Model
      EDM funziona su SQL Server, Oracle, DB2… DB Indipendent
    ◦ E’ un tool (con annesso servizi) per consumare un
     Entity Data Model
    ◦ Gestione centralizzata tramite l’Object Context
   Perché usarlo?
    ◦ Aumenta la produttività
    ◦ Genera mapping complessi tra entità e tabelle del
      database
    ◦ Integrato con il Microsoft .NET Technology Stack
   Note
    ◦ E’ “strategico”
   Composto da 3 layers:   Entity Data Model
    ◦ Conceptual (CSDL)
    ◦ Mapping (MSL)            Conceptual
    ◦ Storage (SSDL)
   Database agnostic
   Comprende:                  Mapping
    ◦ Entità
    ◦ Associazioni
    ◦ Funzioni                  Storage
20 Minuti…Non ti concediamo di più!
   Abbiamo visto cos’è un ORM con annessi
    pros e cons.

   Abbiamo visto cos’è un DAL e perché un ORM
    è importante per la generazione dello stesso.

   Abbiamo visto EF come strumento di ORM.

   Quindi da oggi potete usare un ORM…
Cosa ci riserva il futuro?
(Status : I’m Away… not connected)

 Domandine...?
ASP.Net
      C#
   HTML5
     JAVA
   IPHONE
 ANDROID
  JOOMLA
WORDPRESS
     VOIP
ADOBE SUITE
La vostra opinione per noi è fondamentale:
     compilate il modulo di feedback
                 …uhm…
 potete anche dirmelo a voce o per email!

        GRAZIE PER L’ATTENZIONE

More Related Content

What's hot

Introduction to penetration testing
Introduction to penetration testingIntroduction to penetration testing
Introduction to penetration testingAmine SAIGHI
 
Cyber Security 101
Cyber Security 101Cyber Security 101
Cyber Security 101Cloudflare
 
Building a Big Data & Analytics Platform using AWS
Building a Big Data & Analytics Platform using AWS Building a Big Data & Analytics Platform using AWS
Building a Big Data & Analytics Platform using AWS Amazon Web Services
 
Claroty Support L1 - Architecture components and terms.pptx
Claroty Support L1 - Architecture components and terms.pptxClaroty Support L1 - Architecture components and terms.pptx
Claroty Support L1 - Architecture components and terms.pptxLeninHernnCortsLlang
 
QRadar, ArcSight and Splunk
QRadar, ArcSight and Splunk QRadar, ArcSight and Splunk
QRadar, ArcSight and Splunk M sharifi
 
Planning and Deploying an Effective Vulnerability Management Program
Planning and Deploying an Effective Vulnerability Management ProgramPlanning and Deploying an Effective Vulnerability Management Program
Planning and Deploying an Effective Vulnerability Management ProgramSasha Nunke
 
Implementing Vulnerability Management
Implementing Vulnerability Management Implementing Vulnerability Management
Implementing Vulnerability Management Argyle Executive Forum
 
Vulnerability Management: What You Need to Know to Prioritize Risk
Vulnerability Management: What You Need to Know to Prioritize RiskVulnerability Management: What You Need to Know to Prioritize Risk
Vulnerability Management: What You Need to Know to Prioritize RiskAlienVault
 
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅Atlassian 대한민국
 
Got SIEM? Now what? Getting SIEM Work For You
Got SIEM? Now what? Getting SIEM Work For YouGot SIEM? Now what? Getting SIEM Work For You
Got SIEM? Now what? Getting SIEM Work For YouAnton Chuvakin
 
(SDD411) Amazon CloudSearch Deep Dive and Best Practices | AWS re:Invent 2014
(SDD411) Amazon CloudSearch Deep Dive and Best Practices | AWS re:Invent 2014(SDD411) Amazon CloudSearch Deep Dive and Best Practices | AWS re:Invent 2014
(SDD411) Amazon CloudSearch Deep Dive and Best Practices | AWS re:Invent 2014Amazon Web Services
 
Security Vulnerabilities in Modern Operating Systems
Security Vulnerabilities in Modern Operating SystemsSecurity Vulnerabilities in Modern Operating Systems
Security Vulnerabilities in Modern Operating SystemsCisco Canada
 
Building Scalable Services with Amazon API Gateway - Technical 201
Building Scalable Services with Amazon API Gateway - Technical 201Building Scalable Services with Amazon API Gateway - Technical 201
Building Scalable Services with Amazon API Gateway - Technical 201Amazon Web Services
 
Enterprise Vulnerability Management: Back to Basics
Enterprise Vulnerability Management: Back to BasicsEnterprise Vulnerability Management: Back to Basics
Enterprise Vulnerability Management: Back to BasicsDamon Small
 
S3 Select를 통한 빠른 데이터 분석하기 - 트랙2, Community Day 2018 re:Invent 특집
S3 Select를 통한 빠른 데이터 분석하기 - 트랙2, Community Day 2018 re:Invent 특집S3 Select를 통한 빠른 데이터 분석하기 - 트랙2, Community Day 2018 re:Invent 특집
S3 Select를 통한 빠른 데이터 분석하기 - 트랙2, Community Day 2018 re:Invent 특집AWSKRUG - AWS한국사용자모임
 

What's hot (20)

Introduction to penetration testing
Introduction to penetration testingIntroduction to penetration testing
Introduction to penetration testing
 
Cyber Security 101
Cyber Security 101Cyber Security 101
Cyber Security 101
 
Migartion to AWS
Migartion to AWSMigartion to AWS
Migartion to AWS
 
Building a Big Data & Analytics Platform using AWS
Building a Big Data & Analytics Platform using AWS Building a Big Data & Analytics Platform using AWS
Building a Big Data & Analytics Platform using AWS
 
Claroty Support L1 - Architecture components and terms.pptx
Claroty Support L1 - Architecture components and terms.pptxClaroty Support L1 - Architecture components and terms.pptx
Claroty Support L1 - Architecture components and terms.pptx
 
QRadar, ArcSight and Splunk
QRadar, ArcSight and Splunk QRadar, ArcSight and Splunk
QRadar, ArcSight and Splunk
 
Planning and Deploying an Effective Vulnerability Management Program
Planning and Deploying an Effective Vulnerability Management ProgramPlanning and Deploying an Effective Vulnerability Management Program
Planning and Deploying an Effective Vulnerability Management Program
 
Implementing Vulnerability Management
Implementing Vulnerability Management Implementing Vulnerability Management
Implementing Vulnerability Management
 
Vulnerability Management: What You Need to Know to Prioritize Risk
Vulnerability Management: What You Need to Know to Prioritize RiskVulnerability Management: What You Need to Know to Prioritize Risk
Vulnerability Management: What You Need to Know to Prioritize Risk
 
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅
 
Sum awsloft tko-iotloft-10-lt4-may-2020
Sum awsloft tko-iotloft-10-lt4-may-2020Sum awsloft tko-iotloft-10-lt4-may-2020
Sum awsloft tko-iotloft-10-lt4-may-2020
 
Got SIEM? Now what? Getting SIEM Work For You
Got SIEM? Now what? Getting SIEM Work For YouGot SIEM? Now what? Getting SIEM Work For You
Got SIEM? Now what? Getting SIEM Work For You
 
(SDD411) Amazon CloudSearch Deep Dive and Best Practices | AWS re:Invent 2014
(SDD411) Amazon CloudSearch Deep Dive and Best Practices | AWS re:Invent 2014(SDD411) Amazon CloudSearch Deep Dive and Best Practices | AWS re:Invent 2014
(SDD411) Amazon CloudSearch Deep Dive and Best Practices | AWS re:Invent 2014
 
Amazon OpenSearch Service
Amazon OpenSearch ServiceAmazon OpenSearch Service
Amazon OpenSearch Service
 
Security Vulnerabilities in Modern Operating Systems
Security Vulnerabilities in Modern Operating SystemsSecurity Vulnerabilities in Modern Operating Systems
Security Vulnerabilities in Modern Operating Systems
 
Building Scalable Services with Amazon API Gateway - Technical 201
Building Scalable Services with Amazon API Gateway - Technical 201Building Scalable Services with Amazon API Gateway - Technical 201
Building Scalable Services with Amazon API Gateway - Technical 201
 
Enterprise Vulnerability Management: Back to Basics
Enterprise Vulnerability Management: Back to BasicsEnterprise Vulnerability Management: Back to Basics
Enterprise Vulnerability Management: Back to Basics
 
AWS Black Belt Techシリーズ AWS IAM
AWS Black Belt Techシリーズ AWS IAMAWS Black Belt Techシリーズ AWS IAM
AWS Black Belt Techシリーズ AWS IAM
 
IBM QRadar BB & Rules
IBM QRadar BB & RulesIBM QRadar BB & Rules
IBM QRadar BB & Rules
 
S3 Select를 통한 빠른 데이터 분석하기 - 트랙2, Community Day 2018 re:Invent 특집
S3 Select를 통한 빠른 데이터 분석하기 - 트랙2, Community Day 2018 re:Invent 특집S3 Select를 통한 빠른 데이터 분석하기 - 트랙2, Community Day 2018 re:Invent 특집
S3 Select를 통한 빠른 데이터 분석하기 - 트랙2, Community Day 2018 re:Invent 특집
 

Similar to ORM - Introduzione

Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateManuel Scapolan
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009Massimiliano Dessì
 
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Massimo Cenci
 
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014Marco Parenzan
 
How I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignHow I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignAndrea Saltarello
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009Massimiliano Dessì
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meetingguest67beeb9
 
Da crud a messaggi per app scalabili e manutenibili
Da crud a messaggi per app scalabili e manutenibiliDa crud a messaggi per app scalabili e manutenibili
Da crud a messaggi per app scalabili e manutenibiliMichele Aponte
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in ActionDotNetMarche
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelFrancesca1980
 
Approccio Pratico al Domain Driven Design
Approccio Pratico al Domain Driven DesignApproccio Pratico al Domain Driven Design
Approccio Pratico al Domain Driven DesignLuca Milan
 
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...Marco Parenzan
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-databaseMajong DevJfu
 
Progettazione database relazionali
Progettazione database relazionaliProgettazione database relazionali
Progettazione database relazionaliRoberto Belmonte
 
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Massimo Cenci
 
Cassandra DB - Linux Day 2019 - Catania - Italy
Cassandra DB - Linux Day 2019 - Catania - ItalyCassandra DB - Linux Day 2019 - Catania - Italy
Cassandra DB - Linux Day 2019 - Catania - ItalyFabrizio Spataro
 

Similar to ORM - Introduzione (20)

Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernate
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009
 
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
 
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014
Modelli applicativi per il Cloud Computing - Part 1 - Edition 2014
 
How I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignHow I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven Design
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meeting
 
Da crud a messaggi per app scalabili e manutenibili
Da crud a messaggi per app scalabili e manutenibiliDa crud a messaggi per app scalabili e manutenibili
Da crud a messaggi per app scalabili e manutenibili
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
 
Slides marcosabatini
Slides marcosabatiniSlides marcosabatini
Slides marcosabatini
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
 
ASP.NET
ASP.NETASP.NET
ASP.NET
 
Approccio Pratico al Domain Driven Design
Approccio Pratico al Domain Driven DesignApproccio Pratico al Domain Driven Design
Approccio Pratico al Domain Driven Design
 
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
Progettazione database relazionali
Progettazione database relazionaliProgettazione database relazionali
Progettazione database relazionali
 
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
 
Wcf data services
Wcf data servicesWcf data services
Wcf data services
 
Cassandra DB - Linux Day 2019 - Catania - Italy
Cassandra DB - Linux Day 2019 - Catania - ItalyCassandra DB - Linux Day 2019 - Catania - Italy
Cassandra DB - Linux Day 2019 - Catania - Italy
 

More from Alessandro Forte

Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte
 
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte
 
Alessandro Forte - ASP.NET per il client Web
Alessandro Forte - ASP.NET per il client WebAlessandro Forte - ASP.NET per il client Web
Alessandro Forte - ASP.NET per il client WebAlessandro Forte
 
Alessandro Forte - Windows Vista 4 Dev - Parte 1
Alessandro Forte - Windows Vista 4 Dev - Parte 1Alessandro Forte - Windows Vista 4 Dev - Parte 1
Alessandro Forte - Windows Vista 4 Dev - Parte 1Alessandro Forte
 
Alessandro Forte - Windows Vista 4 Dev - Parte 2
Alessandro Forte - Windows Vista 4 Dev - Parte 2Alessandro Forte - Windows Vista 4 Dev - Parte 2
Alessandro Forte - Windows Vista 4 Dev - Parte 2Alessandro Forte
 
Alessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte
 
Alessandro Forte - Model View Presenter
Alessandro Forte - Model View PresenterAlessandro Forte - Model View Presenter
Alessandro Forte - Model View PresenterAlessandro Forte
 
Alessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma AndroidAlessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma AndroidAlessandro Forte
 

More from Alessandro Forte (8)

Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
 
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.NetAlessandro Forte - Realizzare controlli Ajax in ASP.Net
Alessandro Forte - Realizzare controlli Ajax in ASP.Net
 
Alessandro Forte - ASP.NET per il client Web
Alessandro Forte - ASP.NET per il client WebAlessandro Forte - ASP.NET per il client Web
Alessandro Forte - ASP.NET per il client Web
 
Alessandro Forte - Windows Vista 4 Dev - Parte 1
Alessandro Forte - Windows Vista 4 Dev - Parte 1Alessandro Forte - Windows Vista 4 Dev - Parte 1
Alessandro Forte - Windows Vista 4 Dev - Parte 1
 
Alessandro Forte - Windows Vista 4 Dev - Parte 2
Alessandro Forte - Windows Vista 4 Dev - Parte 2Alessandro Forte - Windows Vista 4 Dev - Parte 2
Alessandro Forte - Windows Vista 4 Dev - Parte 2
 
Alessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVC
 
Alessandro Forte - Model View Presenter
Alessandro Forte - Model View PresenterAlessandro Forte - Model View Presenter
Alessandro Forte - Model View Presenter
 
Alessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma AndroidAlessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma Android
 

ORM - Introduzione

  • 1. Alessandro Forte SW Architect @ T&C Group MCP – MCTS http://www.alessandroforte.it/blog info@alessandroforte.it
  • 2. Alessandro Forte Software Architect @ T&C Group DotNetCampan ia Founder Contatti WebSite: http://www.alessandroforte.it/ Blog: http://www.alessandroforte.it/blog/ E-Mail: informazioni@alessandroforte.it Prossimo Speech BBCC - Biology, Bioinformatics and Computation in Campania Napoli, 27/09/2012 Compra il mio libro
  • 3. Agenda della giornata: o ORMs o OR Impedance Mismatch o DAL o Entity Framework o DEMO (Creiamo un EDM) o DEMO (Consumiamo un EDM) o QAT
  • 4.
  • 5. “Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique in which a metadata descriptor is used to connect object code to a relational database”. Object code is written in object-oriented programming (OOP) languages such as Java or C#. Gli Oggetti sono GERARCHICI I Database sono RELAZIONALI
  • 6. “Object-Relational Impedance Mismatch” è un modo elegante di dire che gli Object Models e i Relational Models non lavorano molto bene tra di loro. Gli RDBMSs rappresentano I dati in un “formato tabellare”, mentre I linguaggi di programmazione object-oriented, come Java e C#, rappresentano I dati come “grafi di oggetti” interconnessi tra di loro. Il caricamento e la memorizzazione di grafi di oggetti usando la notazione tabellare dei database relazionali ci espone ad almeno 5 problemi di “disallineamento”
  • 7. 1) Granularity
  • 8. Spesso ci troviamo nel caso in cui il nostro Object Model ha (mappa) più classi rispetto al numero corrispondente di tabelle nel database. public class Teacher{ } public class School{ }
  • 9. 1) Granularity 2) Inheritance
  • 10. L’ereditarietà è un paradigma “naturale” nei linguaggi di programmazione orientati agli oggetti. Negli RDBMS invece non abbiamo nulla che possa essere paragonato al concetto di ereditarietà. User Inheritance Student Teacher
  • 11. 1) Granularity 2) Inheritance 3) Identity
  • 12. Un RDBMS definisce esattamente una ed una sola nozione di «identità» Teacher_id = 2233 Thread 1 Teacher Thread 2 Teacher
  • 13. 1) Granularity 2) Inheritance 3) Identity 4) Associations
  • 14. Le associazioni sono rappresentate come un riferimento unidirezionale nei linguaggi orientanti agli oggetti. Infatti se si necessita di una relazione “bidirezionale”, è necessario definire due volte l’associazione. Gli RDBMS invece utilizzano il concetto delle Foreign Keys che è intrinsecamente bi-direzionale. Class user_main { Teacher teacher; } Class Teacher { }
  • 15. 1) Granularity 2) Inheritance 3) Identity 4) Associations 5) Data Types
  • 16. Una delle maggiori "differenze" tra i database relazionali e i linguaggi OO risiede nella tipologia dei Tipi utilizzati. Il modello relazionale infatti proibisce in maniera "stretta" attributi (o puntatori) per referenza, al contrario di ciò che fanno invece i linguaggi OO. String Varchar(150) Date DateTime Decimal Money Caso emblematico è caratterizzato dal tipo Stringa. Molti sistemi SQL costringono a definire per le stringhe una lunghezza massima, mentre la maggior parte dei linguaggi OO dimensiona automaticamente le stringhe con la memoria disponibile.
  • 17.
  • 18. Object Relational Mapping, è una tecnica che consente ai linguaggi di programmazione orientati agli oggetti di lavorare “bene” con i database relazionali. Object world Relational world User Stu Mapping A… B..
  • 19. Esistono molti ORMs sul mercato  LLBLGen Pro http://www.llblgen.com/  Nhibernate http://www.hibernate.org/343.html  EntitySpaces http://www.entityspaces.net/Portal/Default.aspx  Open Access http://www.telerik.com/products/orm.aspx  DevForce http://www.ideablade.com/  XPO http://www.devexpress.com/Products/NET/ORM/  Lightspeed http://www.mindscape.co.nz/products/LightSpeed/default .aspx  e molti altri ancora…  Non c’è un “vincitore” assoluto = gli ORM sono di “recente” utilizzo ◦ Nel 2003 erano presenti 31 .NET ORMs. ◦ Oggi ce ne sono alcuni cardine su cui si estendono gli altri….
  • 20. Typed Datasets (cough) – rilasciato nel 2002   ObjectSpaces “v1” – MAI rilasciato   ObjectSpaces “v2” – MAI rilasciato   Microsoft Business Framework – MAI rilasciato   WinFS – MAI rilasciato   Entity Framework 1 ◦ LINQ to SQL – rilasciato nel Novembre del 2007   Visual Studio 2008 & .NET Framework 3.5 ◦ LINQ to Entities – rilasciato nell’Agosto del 2008   Visual Studio 2008 SP1 & .NET Framework 3.5 SP1  Entity Framework 4 – rilasciato nel Aprile del 2010  ◦ Visual Studio 2010 & .NET Framework 4.0  Entity Framework 5 RC ◦ Visual Studio 2011 & .NET Framework 4.5 Beta
  • 21.
  • 22. Demo – Orm … cosa avevate capito?
  • 23. ◦ Velocità di Sviluppo.  Una su tutte…Elimina la scrittura di codice ripetitivo come il mapping dei campi di una query result sulle proprietà di un oggetto e viceversa. ◦ Supporto OO per l’incapsulamento delle business rules all’interno del proprio DAL (meglio BL ).  Si scrivono (e si debuggano) le regole di business nel linguaggio di preferenza, invece di utilizzare “milioni” di trigger e “miliardi” di stored procedures.
  • 24. ◦ Rende l’accesso ai dati più astratto e portabile.  Le classi di implementazione dell’ORM conoscono come scrivere vendor-specific SQL, così addio “traduzione”. ◦ Generazione di codice “standard” per le operazioni CRUD (Create, Read, Update, Delete).  Alcuni ORM frameworks ispezionano direttamente I metadata dei database, leggono i metadata mapping files, e generano classi e metodi...
  • 25.  Database con 300 tabelle… • 1 tabella = 4 operazioni CRUD = 4 Sprocs
  • 26.  300 tabella = 1200 operazioni CRUD = 1200 Sprocs  Sapete cosa significa? • Fate voi … 
  • 27. Svantaggi di un ORM ◦ Bassa capacità di Interrogazione  Genera un wrap di SQL (poco ottimizzabile) ◦ Riduzione del codice SQL  Finché parliamo di CRUD è ok. Ma su query complesse l’SQL è più semplice. ◦ Lazy loading approach  La tecnica è interessante di per sé…  Invece l’esecuzione di SQL addizionale per recuperare le referenze a colonne di tabelle correlate è usualmente poco efficiente.
  • 28. Agenda della giornata: o ORMs o OR Impedance Mismatch o DAL
  • 29. “A data access layer (DAL) in computer software, is a layer of a computer program which provides simplified access to data stored in persistent storage of some kind, such as an entity-relational database”
  • 30.
  • 31.
  • 32. Cos’è? ◦ E’ un tool (con annesso servizi) per creare un Entity Data Model  EDM funziona su SQL Server, Oracle, DB2… DB Indipendent ◦ E’ un tool (con annesso servizi) per consumare un Entity Data Model ◦ Gestione centralizzata tramite l’Object Context  Perché usarlo? ◦ Aumenta la produttività ◦ Genera mapping complessi tra entità e tabelle del database ◦ Integrato con il Microsoft .NET Technology Stack  Note ◦ E’ “strategico”
  • 33. Composto da 3 layers: Entity Data Model ◦ Conceptual (CSDL) ◦ Mapping (MSL) Conceptual ◦ Storage (SSDL)  Database agnostic  Comprende: Mapping ◦ Entità ◦ Associazioni ◦ Funzioni Storage
  • 34.
  • 35. 20 Minuti…Non ti concediamo di più!
  • 36. Abbiamo visto cos’è un ORM con annessi pros e cons.  Abbiamo visto cos’è un DAL e perché un ORM è importante per la generazione dello stesso.  Abbiamo visto EF come strumento di ORM.  Quindi da oggi potete usare un ORM…
  • 37. Cosa ci riserva il futuro?
  • 38.
  • 39. (Status : I’m Away… not connected) Domandine...?
  • 40. ASP.Net C# HTML5 JAVA IPHONE ANDROID JOOMLA WORDPRESS VOIP ADOBE SUITE
  • 41. La vostra opinione per noi è fondamentale: compilate il modulo di feedback …uhm… potete anche dirmelo a voce o per email! GRAZIE PER L’ATTENZIONE