Archives

Etude comparative de framework de persistance

Dans le cadre d’un projet scolaire, j’ai été amené à réaliser une étude comparative sur les frameworks de persitance .NET. J’ai réalisé cette recherche en novembre 2006 avec d’autres collègues de classe et nous avons décidé d'étudier les plateformes suivantes :

Les frameworks open source :

  • NHibernate - Hibernate
  • DomainObjects For Dot Net - Richard Beauchamp
  • OPF 3 - Chili Software
  • Sooda - Jaroslaw Kowalski
  • NPersist - Mats Helander Mats HelanderMats HelanderMats Helander Mats Helander
  • EUSS (Ex DTM) - Evaluant


Les frameworks propriétaires :

  • OPF - Chili Software
  • NDO - House of Tools Development
  • Genome - TechTalk
  • ObjectAlive - Effect Software


Avant de parler de la plateforme choisie, je vais faire quelques rappels sur les définitions.
Définition de la persistance

Lorsque l’exécution d’un programme informatique se termine, les données qui résident en mémoire sont perdues. La persistance permet de sauvegarder et de restaurer ces données afin qu’elles ne soient pas perdues.

Ces informations peuvent être sauvegardées sur disque ou bien transmises à un serveur qui les insère dans une base de données.

Le mécanisme de la persistance permet de dissocier les valeurs des données et l’architecture matérielle par laquelle elles transitent. Ainsi, quelle que soit l’architecture matérielle utilisée, le format des données reste indépendant, cela dans le but de faciliter la maintenance du programme.

Comme il existe de nombreux formats de bases de données et de langages de programmation, il est nécessaire d’établir une correspondance (le « mapping ») entre tous ces formats par le biais de la persistance.

Qu’est ce qu’ADO ?

ADO (ActiveX Data Object) est une technologie Microsoft qui fournit une interface d'accès aux données dans l'environnement Windows. Elle permet aux programmes clients d'accéder aux données, et de les manipuler, dans un fichier ou un serveur de base de données.

Elle est intégrée à la plateforme .NET de Microsoft, et permet, dans sa version la plus récente, d’être utilisé de manière connectée (une connexion permanente est effectuée à la base de données le temps du traitement) ou déconnectée (on se connecte à la base, on récupère les informations, on se déconnecte, puis on effectue le traitement sur ces informations). Cette interface est basée sur le format XML (Extensible Markup Language) et sur l’état des lignes (DataRowState). Elle apporte également des classes indépendantes du moteur d’exécution.

Pourquoi utiliser un framework de persistance ?

Un framework est un ensemble de bibliothèques permettant le développement rapide d'applications. Un framework de persistance permet donc d’utiliser un ensemble de fonctions dédiées à la manipulation des données. Ces fonctions, souples et évolutives, permettent ainsi de produire un code propre et minimaliste. Par conséquent, l’utilisation d’un framework de persistance offre une qualité de production, une grande efficacité et une maintenance accrue dans les projets.
Nous avons testé l’ensemble des frameworks de persistance et nous avons retenu ObjectAlive de la société effect Software basée à Lille.

En effet l’apprentissage de ce framework est très rapide, il est simple à implémenter et dans le package d’installation sont fournis 2 exemples de programmes utilisant OA.

Cette plateforme supporte les bases de données les plus courantes (Microsoft SQL Server, Oracle, MySQL…). Il est également compatible avec Windows Vista ce qui n’est pas le cas de toutes plateformes.

Son propre langage de requête est calqué sur le langage SQL pour une prise en main plus rapide, et permet également d’importer des objets très rapidement.De plus OA génère les bases de données en respectant le modèle relationnel.

Voici la liste des caractéristiques principales d’ObjectAlive telles que :

  • Multi bases de données
Les bases de données relationnelles les plus utilisées sur le marché peuvent être prises en charge par OA en toute transparence.
  • Non intrusif

Aucun héritage de classe ou utilisation de types spécifiques n’est nécessaire pour une mise en œuvre de la persistance. Vous pouvez continuer à développer sans contrainte à l’aide des types et autres éléments disponibles dans la plate-forme .NET.

  • Transparence des mises à jour dans la source de données

Les modifications que vous apportez à vos objets sont prises en compte en toute transparence. Ainsi, vous développez dans un contexte orienté objet sans limitation dû au stockage des informations dans une base de données relationnelle.

  • Langages de requêtes évolués

Object Query Language (OQL)
    Langage de requêtes dont la syntaxe est proche de celle de SQL, ce qui permet une prise en main rapide par les équipes de développement.
Object Graph Loading Language (OGLL)
    Associé au langage OQL, ce langage aux possibilités avancées permet le chargement d’objets avec une incroyable efficacité, et libère les développeurs de l’optimisation et de l’écriture de requêtes complexes.

  • Mécanisme de traçabilité

    Des mécanismes structurants permettent de regrouper, de protéger, et d’identifier rapidement les objets manipulés dans le contexte d’un cas d’utilisation.

  • Génération de la base de données

OA génère, sous votre contrôle, le schéma de données dont vous avez besoin, tout en respectant le modèle relationnel. Il ne vous est plus nécessaire de concevoir la base de données en marge de la conception de votre application.

  • Transactions automatiques

Une transaction, dans le cadre d'une base de données, est une série d'ordres SQL, encadrés par une instruction de début de transaction BEGIN TRAN, et une instruction de fin qui peut être soit Commit, dans le cas où tous les ordres ont correctement été exécutés, ou Rollback dans le cas d'une erreur sur un ordre, par exemple. (ndGui : je n’ai pas défini « automatique »)

  • Transactions concurrentes

Il y a transactions concurrentes dès que plusieurs utilisateurs veulent accéder à une même donnée.

  • Lazy loading

On appelle « Lazy Loading » la technique qui consiste à ne charger que les éléments correspondants à la demande spécifique du programmeur.