SlideShare a Scribd company logo
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
ORM - Introduzione
“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.
ORM - Introduzione
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
ORM - Introduzione
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”
ORM - Introduzione
ORM - Introduzione
   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
ORM - Introduzione
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?
ORM - Introduzione
(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

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
  • 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.
  • 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
  • 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”
  • 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
  • 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?
  • 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