12.07.2013 Views

Etude exploratoire de Linq - CoDE - de l'Université libre de Bruxelles

Etude exploratoire de Linq - CoDE - de l'Université libre de Bruxelles

Etude exploratoire de Linq - CoDE - de l'Université libre de Bruxelles

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Hibernate est un choix lié au mon<strong>de</strong> relationnel offrant un ensemble <strong>de</strong> fonctionnalités pas toujours<br />

aisées à maîtriser. Précisons tout <strong>de</strong> même qu’Hibernate est bien plus ancien que <strong>Linq</strong>, puisque sa<br />

création remonte à 2001. Bien que les interfaces JPA aient été créées pour englober plusieurs<br />

utilitaires <strong>de</strong> persistance dont Hibernate, ce <strong>de</strong>rnier reste davantage un ORM qu’une solution<br />

intégrée au langage. De manière générale, le rôle <strong>de</strong>s implémentations <strong>de</strong> JPA reste borné à<br />

effectuer une persistance plus simple lorsque les données sont stockées sous forme relationnelle.<br />

6.3.2 .NET<br />

Bien que <strong>Linq</strong> y soit récent et que, au contraire <strong>de</strong> Java, ce langage ne s’enrichisse pas directement<br />

sur la base d’une communauté <strong>de</strong> contributeurs, .NET et C# en particulier proposent d’autres<br />

alternatives pour réaliser la persistance <strong>de</strong>s données sans passer par toute la panoplie <strong>de</strong>s<br />

comman<strong>de</strong>s ADO.NET. Les autres métho<strong>de</strong>s que nous allons abor<strong>de</strong>r sont, <strong>de</strong> manière générale,<br />

<strong>de</strong>stinées à un autre public que celui prévu pour <strong>Linq</strong>.<br />

6.3.2.1 NHibernate<br />

Comme son nom l’indique, il s’agit là d’une version d’Hibernate adaptée au langage C# (le N est une<br />

abréviation courante en préfixe d’une technologie pour signifier qu’elle s’applique à .NET). Les<br />

informations relatives à NHibernate émanent <strong>de</strong> [17]. Le cœur d’Hibernate a été porté vers .NET et<br />

son utilisation a été quelque peu adaptée pour mieux répondre aux attentes <strong>de</strong>s développeurs .NET.<br />

Cet outil a été développé par la même équipe que celle en charge <strong>de</strong> la version Java. De par sa<br />

structure et son mo<strong>de</strong> <strong>de</strong> fonctionnement, il s’agit encore une fois d’un ORM qui vient se greffer sur<br />

une architecture déjà existante, celle <strong>de</strong> l’incontournable couche ADO.NET. NHibernate est présenté<br />

comme une solution mature, capable <strong>de</strong> réaliser la correspondance objet relationnel <strong>de</strong> manière<br />

transparente pour le développeur. NHibernate répond à une <strong>de</strong>man<strong>de</strong> particulière : ne pas être<br />

limité par l’ORM en étant sûr que, <strong>de</strong> toute façon, les données seront sauvées dans une base <strong>de</strong><br />

données relationnelle. Il s’agit là d’une optique quelque peu hors <strong>de</strong>s objectifs <strong>de</strong> <strong>Linq</strong> qui souhaite<br />

créer une abstraction avec le stockage tout en mettant davantage en avant la facilité <strong>de</strong> mise en<br />

œuvre. A noter que <strong>de</strong>puis peu, NHibernate propose un module complémentaire <strong>Linq</strong> to NHibernate<br />

permettant d’utiliser la syntaxe <strong>Linq</strong> pour réaliser <strong>de</strong>s requêtes avec NHibernate [18].<br />

6.3.2.2 Entity Framework<br />

Voici une figure connue, les informations à son sujet sont toujours majoritairement issues <strong>de</strong> [5].<br />

L’Entity Framework, que nous avions brièvement introduit dans la section <strong>Linq</strong> to Entities, est lui<br />

aussi en soi une alternative à <strong>Linq</strong>. Il serait mieux <strong>de</strong> parler <strong>de</strong> complémentarité entre ces <strong>de</strong>ux outils<br />

que <strong>de</strong> concurrence, néanmoins il reste possible d’utiliser l’un sans l’autre. L’Entity Framework<br />

permet essentiellement <strong>de</strong>ux choses : choisir la forme <strong>de</strong>s entités à manipuler et automatiser toute<br />

la cuisine interne nécessaire pour pouvoir fournir <strong>de</strong>s entités personnalisées <strong>de</strong> manière efficace.<br />

Comme nous l’avions vu, cela ajoute également un niveau d’abstraction vis-à-vis <strong>de</strong> la base <strong>de</strong><br />

données, car le co<strong>de</strong> manipulant les entités est bien séparé <strong>de</strong>s manipulations relationnelles. <strong>Linq</strong><br />

apporte quant à lui la puissance et la simplicité d’utilisation <strong>de</strong> son langage <strong>de</strong> requêtes. L’Entity<br />

Framework a donc pour vocation d’ai<strong>de</strong>r à définir la « business logic » <strong>de</strong> l’application sans entrave<br />

<strong>de</strong> la part du stockage <strong>de</strong>s données, alors que <strong>Linq</strong> permet <strong>de</strong> récupérer <strong>de</strong>s éléments précis plus<br />

aisément. Il est tout à fait envisageable <strong>de</strong> vouloir gar<strong>de</strong>r la main sur le langage <strong>de</strong> requêtes car, en<br />

effet, celles-ci seront traduites tôt ou tard en Sql. Dans cette optique-là, l’utilisation <strong>de</strong> l’Entity<br />

Framework se fera sans l’ai<strong>de</strong> <strong>de</strong> <strong>Linq</strong>. En résumé, si la difficulté se situe au niveau <strong>de</strong> l’architecture<br />

du co<strong>de</strong> ou <strong>de</strong> la jonction entre la logique métier et la couche <strong>de</strong> persistance <strong>de</strong>s données, Entity

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!