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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

que les attributs <strong>de</strong> cette table doivent être accédés par la métho<strong>de</strong> Field en précisant<br />

explicitement la nature <strong>de</strong> T, car le compilateur ne pourrait réaliser l’inférence <strong>de</strong>puis un champ<br />

d’une DataTable. Ceci n’est simplement pas prévu. Peut-être cela changera-t-il dans le futur, mais<br />

pour l’heure nous <strong>de</strong>vons nous-mêmes fournir les informations qui sont en réalité <strong>de</strong>s informations<br />

<strong>de</strong> mapping encore une fois. Pour en revenir à l’opérateur AsEnumerable, il s’agit d’un opérateur<br />

réalisant la conversion à la volée. Il s’applique à une séquence d’éléments et va les encapsuler dans<br />

une nouvelle séquence d’objets implémentant IEnumerable. Cet opérateur peut être redéfini,<br />

offrant ainsi la possibilité <strong>de</strong> créer <strong>de</strong>s variantes adaptées au contexte.<br />

En ce qui concerne les performances, la question est <strong>de</strong> mettre en balance ce que <strong>Linq</strong> apporte et les<br />

délais introduits. Le mapping est réalisé par le DataSet lui-même et <strong>de</strong>s instructions explicites au<br />

niveau du co<strong>de</strong>. Aucune logique <strong>de</strong> mapping automatique ne vient alourdir l’usage classique d’un<br />

DataSet. Les performances en termes <strong>de</strong> temps <strong>de</strong> réponses seront fonction du contexte et non du<br />

choix d’avoir ou non utilisé <strong>Linq</strong>. Notons tout <strong>de</strong> même que l’utilisation <strong>de</strong> telles structures n’est pas<br />

toujours aisée et en particulier traduire une requête en langage naturel <strong>de</strong>vrait être beaucoup plus<br />

simple en utilisant <strong>Linq</strong>.<br />

Avec <strong>Linq</strong> to DataSet, nous avons une solution portable vers tout type <strong>de</strong> base <strong>de</strong> données et même<br />

vers d’autres systèmes <strong>de</strong> persistance car, rappelons-le, un DataSet représente simplement une<br />

collection <strong>de</strong> données. Cela permet d’utiliser le confort lié aux requêtes <strong>de</strong> <strong>Linq</strong>, certes, mais <strong>Linq</strong> to<br />

DataSet <strong>de</strong>man<strong>de</strong> pas mal <strong>de</strong> réglages <strong>de</strong> la part du développeur, notamment d’assurer le suivi entre<br />

le DataSet et la base <strong>de</strong> données. Il s’agit là d’un inconvénient majeur puisque cela peut amener <strong>de</strong>s<br />

problèmes liés à la synchronisation ainsi que toute la panoplie d’erreurs classiques liées à l’accès aux<br />

données en Sql. Ceci ne constitue pas alternative à <strong>Linq</strong> to Sql mais plutôt comme un complément<br />

pour répondre aux besoins <strong>de</strong>s développeurs ayant choisi <strong>de</strong> manipuler <strong>de</strong>s DataSets ou ayant à<br />

maintenir <strong>de</strong>s applications qui en font toujours usage. [4] maintient que « les DataSets sont une<br />

composante importante <strong>de</strong> la couche ADO.NET », ce qui fait <strong>de</strong> <strong>Linq</strong> to DataSet un outil appréciable.<br />

4.4 <strong>Linq</strong> to Entities<br />

Une autre implémentation ayant pour cible <strong>de</strong>s données relationnelles s’appelle <strong>Linq</strong> to Entities. Le<br />

terme Entities dans son nom fait référence à la technologie Entity Framework, qui est une évolution<br />

<strong>de</strong> la couche ADO.NET que nous appellerons par raccourci EF. EF est légèrement plus récent encore<br />

que <strong>Linq</strong>. Nous allons brièvement introduire les idées fondatrices <strong>de</strong> cette technologie ainsi que ses<br />

principaux concepts. Nous tenterons ensuite <strong>de</strong> mettre en lumière les forces et faiblesses <strong>de</strong> ce<br />

framework, tout en particularisant cela aux contributions <strong>de</strong> <strong>Linq</strong> to Entities. Cette section puise ses<br />

informations principalement <strong>de</strong> [5] pour EF et <strong>de</strong> [1] pour <strong>Linq</strong> to Entities.<br />

4.4.1 Concepts fondateurs<br />

L’idée au départ <strong>de</strong> l’EF est celle-là même qui a amené <strong>Linq</strong>. Nous pourrions résumer cette idée <strong>de</strong><br />

base en « une application orientée objet ne <strong>de</strong>vrait pas dépendre <strong>de</strong>s mécanismes <strong>de</strong> persistance ».<br />

Nous n’allons pas expliquer à nouveau le problème <strong>de</strong> correspondance entre l’orienté objet et le<br />

relationnel mais nous allons plutôt ce problème dans le contexte <strong>de</strong> la <strong>de</strong>uxième édition du<br />

framework .NET. A cette époque pas si lointaine d’ailleurs, les accès relationnels se faisaient en<br />

utilisant les services <strong>de</strong> la couche ADO.NET, elle-même une évolution <strong>de</strong>s premiers services ADO<br />

(ADO signifie ActiveX Data Object). Cette nouvelle couche apportait son lot <strong>de</strong> nouveautés, parmi<br />

lesquelles l’interface IDbConnection, qui permettait <strong>de</strong> considérer une connexion générique à une

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

Saved successfully!

Ooh no, something went wrong!