SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

MySQL Database Architectures - High Availability and Disaster Recovery Solution
MySQL Database Architectures - High Availability and Disaster Recovery SolutionMySQL Database Architectures - High Availability and Disaster Recovery Solution
MySQL Database Architectures - High Availability and Disaster Recovery SolutionMiguel Araújo
 
Running MariaDB in multiple data centers
Running MariaDB in multiple data centersRunning MariaDB in multiple data centers
Running MariaDB in multiple data centersMariaDB plc
 
UNYOUG - APEX 19.2 New Features
UNYOUG - APEX 19.2 New FeaturesUNYOUG - APEX 19.2 New Features
UNYOUG - APEX 19.2 New Featuresmsewtz
 
Building Stream Infrastructure across Multiple Data Centers with Apache Kafka
Building Stream Infrastructure across Multiple Data Centers with Apache KafkaBuilding Stream Infrastructure across Multiple Data Centers with Apache Kafka
Building Stream Infrastructure across Multiple Data Centers with Apache KafkaGuozhang Wang
 
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScaleThe Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScaleColin Charles
 
Webinar slides: Migrating to Galera Cluster for MySQL and MariaDB
Webinar slides: Migrating to Galera Cluster for MySQL and MariaDBWebinar slides: Migrating to Galera Cluster for MySQL and MariaDB
Webinar slides: Migrating to Galera Cluster for MySQL and MariaDBSeveralnines
 
Designing IBM MQ deployments for the cloud generation
Designing IBM MQ deployments for the cloud generationDesigning IBM MQ deployments for the cloud generation
Designing IBM MQ deployments for the cloud generationDavid Ware
 
Bruce Momjian - Inside PostgreSQL Shared Memory @ Postgres Open
Bruce Momjian - Inside PostgreSQL Shared Memory @ Postgres OpenBruce Momjian - Inside PostgreSQL Shared Memory @ Postgres Open
Bruce Momjian - Inside PostgreSQL Shared Memory @ Postgres OpenPostgresOpen
 

Was ist angesagt? (8)

MySQL Database Architectures - High Availability and Disaster Recovery Solution
MySQL Database Architectures - High Availability and Disaster Recovery SolutionMySQL Database Architectures - High Availability and Disaster Recovery Solution
MySQL Database Architectures - High Availability and Disaster Recovery Solution
 
Running MariaDB in multiple data centers
Running MariaDB in multiple data centersRunning MariaDB in multiple data centers
Running MariaDB in multiple data centers
 
UNYOUG - APEX 19.2 New Features
UNYOUG - APEX 19.2 New FeaturesUNYOUG - APEX 19.2 New Features
UNYOUG - APEX 19.2 New Features
 
Building Stream Infrastructure across Multiple Data Centers with Apache Kafka
Building Stream Infrastructure across Multiple Data Centers with Apache KafkaBuilding Stream Infrastructure across Multiple Data Centers with Apache Kafka
Building Stream Infrastructure across Multiple Data Centers with Apache Kafka
 
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScaleThe Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
 
Webinar slides: Migrating to Galera Cluster for MySQL and MariaDB
Webinar slides: Migrating to Galera Cluster for MySQL and MariaDBWebinar slides: Migrating to Galera Cluster for MySQL and MariaDB
Webinar slides: Migrating to Galera Cluster for MySQL and MariaDB
 
Designing IBM MQ deployments for the cloud generation
Designing IBM MQ deployments for the cloud generationDesigning IBM MQ deployments for the cloud generation
Designing IBM MQ deployments for the cloud generation
 
Bruce Momjian - Inside PostgreSQL Shared Memory @ Postgres Open
Bruce Momjian - Inside PostgreSQL Shared Memory @ Postgres OpenBruce Momjian - Inside PostgreSQL Shared Memory @ Postgres Open
Bruce Momjian - Inside PostgreSQL Shared Memory @ Postgres Open
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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