Mapping objet relationnel

Slides:



Advertisements
Présentations similaires
REFERENTIEL DE LA SERIE STG
Advertisements

Applications N-Tiers Rappels: architecture et méthodologie
C#3 et le projet Linq Mitsuru FURUTA
De Windows Forms à Windows Presentation Foundation
Linq, fonctionnement et architecture
« Les Mercredis du développement » Introduction Office « 12 » Présenté par Bernard Fedotoff Microsoft Regional Director Agilcom.
C# 2.0, un an après Mitsuru FURUTA
Automatisation de Tâches Scenarios
19 septembre 2006 Tendances Logicielles IBM Rational Data Architect Un outil complet de modélisation et de conception pour SGBD Isabelle Claverie-Berge.
Introduction Pour concrétiser l’enseignement assisté par ordinateur
1 Les technologies XML Cours 1 : Les Web Services et Architectures Orientées Services Fé vrier Version 1.0 -
Design Pattern MVC En PHP5.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Entité Module Java Expert.
TP 3-4 BD21.
Introduction à la POO: Les classes vs les objets
Mitsuru FURUTA Relations techniques développeurs Microsoft France
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Page de garde Introduction aux Design Patterns ISIA, Mars 2003
Développement d’applications web
Mitsuru FURUTA Relations techniques développeurs Microsoft France
XML-Family Web Services Description Language W.S.D.L.
Amélioration de la sécurité des données à l'aide de SQL Server 2005
ASP.NET un peu plus loin… Développement Rapide dApplications Web avec.NET.
Principes de persistance dans les applications orienté objet
Développement Rapide dApplications Web avec.NET « Mon premier site »
Accès aux données généralisé SQL est presque une solution! Le problème: Le SQL n'est pas une langue complète, et doit être intégré dans un langage de programmation.
Chap 4 Les bases de données et le modèle relationnel
Projet JAVA EE Approfondi
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
ASP.NET Par: Hugo St-Louis. C ARACTÉRISTIQUES A SP. NET Évolution, successeur plus flexible quASP (Active Server Pages). Pages web dynamiques permettant.
Les concepts et les méthodes des bases de données
Développement dapplication avec base de données Semaine 10 : WCF avec Entité Framework Automne 2013.
Processus d'un projet F.Pfister
J2EE vs .NET Réaliser par : SEIF ENNACER BADRA && CHETOUI RIM.
NET LINQ, ADO Vnext, Orcas,… Pierre COUZY Stéphane GOUDEAU Architecte en Système d’information Division Plateformes et Ecosystème Microsoft France.
Entity Framework 4 Mitsuru FURUTA Relations techniques développeurs
DataBinding avancé Mitsuru FURUTA, relations techniques développeurs –
1 journée, 5 sessions, 1 réalisation.NET Enterprise Realization Day.
Introduction.
La notion de type revisitée en POO
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Architecture Logicielle Les blocs d’applications
Créer des packages.
Le contenu est basé aux transparents du 7 ème édition de «Software Engineering» de Ian Sommerville«Software Engineering» de Ian Sommerville B.Shishedjiev.
Code Contracts Gilles TOURREAU - MVP C# Architecte .NET / Formateur
Créez des applications Silverlight 3 David Rousset Relations Techniques avec les développeurs Microsoft France
Les différents modèles d’architecture technique
MOCK.
Entity/Facet/Pattern Une application qui en a…
SYSTEMES d’INFORMATION séance 1 : Introduction et définitions
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun.
Les vues Une vue: c’est une relation virtuelle. Définie par:
L T I Laboratoire de Téléinformatique 2 Projet de semestre Parseur XML basé sur la DTD : Buts –Utiliser la grammaire définissant un type de fichiers XML.
1 Structure en MC Principes Stockage des données dans la mémoire volatile d’un ordinateur Problèmes Stockage temporaire «Petits» volumes de données Langages.
La gestion des bases de données
Les bases de données Séance 8 Jointures.
1 Applications d’entreprise avec.NET 4.0 et Silverlight 4 David Rousset Mitsuru Furuta
Gestion des documents internes avec SQL Server 2005 Date de publication : janvier 2006.
Benjamin Soulier Technical Expert Cambridge Technology Partners Les nouveautés de Windows Azure.
Cours n°2 Implémentation et exploitation
Introduction Module 1.
1 Silverlight & XNA Développeurs, à vous le mobile! Pierre Cauchois - Microsoft France Relations avec les développeurs (mobiles et embarqués)
Introduction SGDBOO Sommaire Définition d’un SGBD (6 services)
Parquet Geoffrey 3 ARIL EXIA.CESI ARRAS. Présentation du MLD Présentation de la persistance Présentation récapitulatif du projet JSP/SERVLET MVC Cycle.
Les bases de données Séance 4 Construction du Modèle Physique (la BDD)
Java et les bases de données Etat de l’art 14 juin 2012.
Schéma de base de données Présentation. Conception du schéma logique  Transformation du schéma conceptuel en structures de données supportées par les.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
SQLSaturday Paris 2015 SSDT-DB pour les sceptiques! Cédric L. Charlier.
Transcription de la présentation:

Mapping objet relationnel Mitsuru FURUTA – Microsoft France mitsufu@microsoft.com http://blogs.microsoft.fr/mitsufu

Objectifs de la présentation C’est une présentation technique ! Appréhender les concepts Comprendre les problématiques Etre capable d’évaluer un produit Mettre en œuvre les principes fondamentaux sous forme de courtes démos Pas de présentation de produit Pas de parti pris Pas de LINQ…

Mapping objet relationnel Introduction Modélisation Architecture Fonctionnalités attendues de la couche objet Productivité MySolution: DSMap, un DataSet objet… La pause ? Quelle pause ?

Introduction Enjeux et problématiques Implémentations Database != objects Architecture multi-couche: DAL, business, présentation Est-il possible d’automatiser la DAL ? Amener la persistance aux objets métiers Modélisation Recherche du modèle unique Requêtage Tuer le SQL Implémentations Outils ou framework ? Modèle intrusif ou pas Solutions souvent techniques Génération de code: templates dynamiques, CodeDom Abstraction: proxy dynamique, tissage

Introduction Idéal ? Le pur mapping O/R ne requiert aucun prérequis ni de la part de la base ni de la part de la couche objet. Il assure le lien entre les deux quelques soient les modèles. La solution assure en général l’accès à la base et la création automatiques des objets (classFactory). Les solutions sont en général riches mais coûteuses en ressources et en performances. Data base Mapping O/R Objects

Introduction Réalité De nombreuses solutions ont le parti pris de se baser soit sur la base soit sur les objets. Les informations de mapping accompagnent alors le modèle choisi et servent à générer le modèle opposée (la base ou les objets) Ces modèles s’utilisent dans la phase de développement. Ils offrent un meilleur niveau de performance en contre partie d’un certain nombre de restrictions sur le modèle généré Data base Mapping O/R Objects Infos de mapping Infos de mapping

Etat de l’art: les générateurs Database Centric: type Olymars Générateur Développement Exécution Data base Objects Infos de mapping

Etat de l’art: les générateurs Object Centric: type DTM (Evaluant) Générateur Développement Exécution Data base Objects Infos de mapping

Que recherchons nous vraiment ? Automatisation de la DAL Performance Consommation mémoire Productivité Outil de conception Abstraction de la base Gestion du changement ? Constat Nous avons tous des attentes différentes Nous savons que cette couche est déterminante Beaucoup de solutions et beaucoup de polémiques

Demo Sans rien…

Modélisation Base de données Objets Modèle physique et conceptuel Tables, colonnes, types simples Clés: primaires, étrangères, composites, indexes Relations Héritage Objets Classes, champs, propriétés Compositions (types complexes), portées Héritage: relationnel ou non Modèle physique et conceptuel Les objets plus proches du modèle conceptuel

Demo …avec des objets

Architecture Organisation en couches Distribution DAL: data abstraction layer Business/Rules: couche métier Présentation: interface utilisateur (windows/web, autre) Distribution Possibilité de distribuer la couche DAL: choix complexe et déterminant Choix d’un modèle communiquant (MarshalByRef) Choix d’un modèle externe: sérialisation personnalisée ou génération d’un modèle communiquant Cette possibilité est souvent ignorée. Il devient pourtant rapidement tentant d’offrir cette couche basse de l’architecture au reste d’un modèle distribué Il est important de poser cette question au plus tôt car les contraintes sont nombreuses (sérialisation, cache distribué, threadsafe ?, sessions, transactions « mémoire »)

Architecture Modèles d’implémentation Enjeux Modèle répétitif Chaque couche définit ses objets/interfaces: Avantages: indépendance totale Inconvénients: gourmand et complexe Modèle navigant Les différentes couches d’échangent un unique objet persistant Avantages: un seul objet à concevoir, pas de duplication mémoire, simple Inconvénients: dépendance entre les couches (l’abstraction via des interfaces permet au moins de libérer la dépendance binaire) Enjeux Concevoir dès la phase de définition d’architecture la nature précise de cette couche La possibilité de rendre les objets distribuables ainsi que les choix de dépendance (interfaces, portées) sont souvent des contraintes importantes d’une architecture d’implémentation.

Organisation en couches Demo Organisation en couches

Fonctionnalités attendues de la couche objet Données Relations/Navigation Requêtes Transaction Cache Mise en œuvre

Fonctionnalités attendues de la couche objet: Données Gestion de la nullité: data == System.DBNull.Value ? Object: boxing/unboxing (non typé) SqlTypes Nullables: int? Projection variable Associer des chargements de colonnes variables dans vers une même classe: « SELECT FIELD1, FIELD2,…, FIELDN FROM… » Le « SELECT * » n’est pas toujours faisable (données trop grandes, blob), modifier le modèle n’est pas la solution Versionning de données Pouvoir jongler avec plusieurs jeux de données d’un même objet: AcceptChanges/RejectChanges

Demo Gestion de la nullité

Demo Versionning

Fonctionnalités attendues de la couche objet: Données Suivi des modifications Mettre en œuvre un moyen de tracer toutes les modifications sur les objets persistants: Notification au niveau des propriétés: pattern « PropertyNameChanged », INotifyPropertyChanged Notification sur les collections: CRUD (Create, Update, Delete) Le système est coûteux et non générique même s’il y a un mieux avec INotifyPropertyChanged (.Net 2.0) Databinding En WinForms ou WebForms Le mapping objet relationnel tente d’automatiser la DAL, essayons de ne pas perdre le databinding ! Respect des interfaces de binding: IList, IBindingList, etc…

Demo Suivi des changements

Fonctionnalités attendues de la couche objet: Relations/Navigation Chargements en cascade LazzyLoading Chargement à la demande lors de la navigation: client.Orders[0].Date Paramétrage Collections Chaînage des appels entre collections et éléments Intégrité Profiter des informations relationnelles de mapping pour valider l’intégrité d’un graphe d’objet (de nombreuses notifications sont alors nécessaires)

Fonctionnalités attendues de la couche objet: Requêtes Génération automatiques des requêtes CRUD Dynamique: à la demande Statique: lors de la génération (si le modèle le propose) Problématiques Performance ? Procédures stockées, vues ? Accès total à la vue physique de la base de données: sécurité ? Sémantique Avoir un langage unique pour requêter en mémoire parmi les objets ou vers la base de données grâce aux informations de mapping: OQL ? XPath ? Linq ? 

Fonctionnalités attendues de la couche objet: Transaction Possibilité de travailler de manière transactionnelle sur un graphe d’objets persistants Notion de session nécessaire même dans un environnement non distribué Isolation des modifications par client (idem base de données) Implémentation des actions Commit et Rollback sur le graphe Nouveauté Profiter du namespace System.Transaction de .Net 2.0 Exemple de dataset transactionnel: http://www.techheadbrothers.com/DesktopDefault.aspx?tabindex=1&tabid=7&AId=120

Fonctionnalités attendues de la couche objet: Cache Les solutions de mapping O/R imposent par définition le mode déconnecté Créer ou ne pas recréer un objet déjà chargé ? Avantages et inconvénients Une ClasseFactory facilite normalement le branchement d’un cache d’objet (unicité de la création) Définir les données du cache, sa stratégie Versionning Exemple de mise en œuvre A la limite du garbage collector

Mise en œuvre d’une solution de cache Demo Mise en œuvre d’une solution de cache

Fonctionnalités attendues de la couche objet: Mise en œuvre Mapping Par attributs Avantages: lié au code, intégrité Inconvénients: lié au code Par fichier externe Avantages: indépendance du code, possibilité de fournir plusieurs versions Inconvénients: pas intègre Ajout de fonctionnalités Par classe partielle: facile mais non objet Par héritage: classe de base AOP: Dynamique, par interception: MarshalByRef Par tissage: AOP

Interception de méthode: MarshalByRef Demo Interception de méthode: MarshalByRef

Demo Premier mapping

Productivité Outils Extensibilité de Visual Studio Externalisation des informations: mapping, méta-données Générateurs: de schémas de base de données, de classes Conception visuelle Extensibilité de Visual Studio Addins Wizards Designers Project & item templates

MySolution: DSMap, un DataSet objet ?!?! Pourquoi développer sa propre solution: Appréhender la difficulté ? Mettre en place une solution originale ? Etre plus apte à juger les produits existants ? Conclure qu’il vaut mieux utiliser une solution du marché ? Coller au mieux à ses besoins ? Vous faire partager l’expérience Se coller des cernes la veille d’une présentation technique rue de l’Université ?

Solution proposée : objectifs Avoir une solution indépendante de la source de données Etre proche de la performance et de la consommation mémoire d’un modèle RAD avec chargement direct dans un DataSet Conserver les fonctionnalités de « DataBinding » et d’utilisation en mode « design » Fournir à la couche métier une unique interface d’accès aux données entièrement objet

Solution proposée : avantages Solution entièrement .Net car s’appuyant sur les DataSets. Modèle indépendant de la source de données (base, xml, mémoire). Chargement unique des données en mémoire dans un DataSet, le reste des classes persistantes offrant uniquement des accesseurs.

Solution proposée : avantages Création entièrement dynamique des collections et des éléments lors d’un parcours d’un graphe d’objets. Plusieurs modes de création automatique des objets : systématique, cache. Avoir des accesseurs non publics, en lecture, écriture ou lecture/écriture

Solution proposée : avantages Charger un nombre de colonnes variable dans un même objet mappé Support du foreach pour les collections Support du DataBinding des objets et des collections Support du binding complexe vers les propriétés et les sous-propriétés d’un objet persistant (DataMember)

Solution proposée : avantages Héritage de classes Support des collections hétérogènes avec classes héritées Mises à jours vers la base (Create, Update, Delete) via les fonctionnalités classiques des DataSets (requêtes auto-générées ou personnalisées)

Solution proposée : contraintes Solution entièrement .Net car s’appuyant sur les DataSets Classes de base imposées pour les collections et les éléments Chargement des clés primaires et étrangères obligatoires

Demo Rappels

Solution proposée : architecture Mauvaise nouvelle IL FAUT CODER !!! Commands, DataAdapters Infos mapping RelationalDataAdapter Infos mapping Data base CRUD Xml DataMapping Infos mapping par attributs Par code DBContext DataSet Objects Mémoire IDBContext IDataSetProvider IAutoUpdate SqlDBContext OracleDBContext ADODBContext

Solution proposée : architecture DataTable DataSet DataTable Data source DataTable DataView DataRowView Field DataClassCollection DataClass Property (Clients[]) (Client) (Client.Nom)

Solution proposée : architecture [DataClass(«ID»)] class ClientCollection : DataClassCollection, IEnumerable, ICollection, IList Client this[int index] { get { return GetItem(index); } DataRowView dataView[] class Client : DataClass IList.this[int index] Réécriture de l’interface IList afin de retourner une instance de DataClass au lieu de DataRowView. DataRowView row DataClass String Nom { get { return row[«NAME»]; }

Solution proposée : mapping simple Client : DataClass String Nom { get return (string) row[«NAME»]; } set row[«NAME»] = value;

Solution proposée : mapping de relations Client : DataClass [DataClassRelation("customerid", "customerid")] public CommandeCollection Commandes { get return (CommandeCollection) this.relations["Commandes"]; } [DataClassRelation(“(customerid=@custumerid) and (state = 1)")] public CommandeCollection CommandesLivrees

Solution proposée : mapping de références Commande : DataClass [DataClassReference("customerid", "customerid")] public Client Client { get { return (Client) this.references["Client"]; } }

Demo DSMap

Questions/Réponses

© 2004 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.