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.

cas, mais certaines informations concernant la synchronisation <strong>de</strong>s entités en mémoire ne peuvent<br />

pas être exprimées. Nous n’allons pas approfondir ces détails dans le cadre <strong>de</strong> cette étu<strong>de</strong>, signalons<br />

simplement que ces <strong>de</strong>ux formes <strong>de</strong> mappings sont équivalentes, l’une étant moins expressive que<br />

l’autre (<strong>de</strong>s réglages supplémentaires seront à la charge du programmeur s’il déci<strong>de</strong> d’utiliser cette<br />

métho<strong>de</strong>).<br />

4.2.1.3 Gestion par le DataContext<br />

A ce sta<strong>de</strong>, nous sommes en droit <strong>de</strong> poser la question suivante « Quand et Comment seront<br />

instantiées ces classes entités ? ». L’idée est que ces objets ne seront créés que lorsqu’ils seront<br />

nécessaires afin <strong>de</strong> ne pas encombrer la mémoire et une classe en particulier sera responsable <strong>de</strong><br />

leur gestion. Cette classe sera en quelque sorte le « chef d’orchestre » du mapping, il s’agit <strong>de</strong> la<br />

classe DataContext.<br />

Un objet <strong>de</strong> classe DataContext représente le lien entre la base <strong>de</strong> données et les classes entités qui<br />

lui sont assignées. Un DataContext contient une ou plusieurs classes entités et est responsable <strong>de</strong> la<br />

génération du co<strong>de</strong> Sql qui sera envoyé à la base <strong>de</strong> données. C’est toujours le DataContext qui va<br />

maintenir les entités, au besoin les créer et les mettre à jour. En pratique, la classe DataContext est le<br />

plus souvent dérivée et c’est un <strong>de</strong> ses <strong>de</strong>scendants qui est utilisé [1], la raison en <strong>de</strong>viendra<br />

apparente lorsque nous envisagerons notre cas pratique. Quand est-ce que les objets entités seront<br />

instanciés ? Lorsque le DataContext reçoit une requête, s’il n’a pas les entités nécessaires à la<br />

fabrication <strong>de</strong> la réponse, il va soumettre la requête à la base <strong>de</strong> données en créant les entités<br />

correspondantes. Nous <strong>de</strong>vons attirer l’attention sur le terme « reçoit » qui est laissé expréssément<br />

flou. <strong>Linq</strong> to Sql utilise une métho<strong>de</strong> d’exécution différée (<strong>de</strong>ferred loading en Anglais) pour ses<br />

requêtes. Cela signifie que lorsqu’une requête est soumise au DataContext, celui-ci ne va pas<br />

nécessairement la transmettre directement à la base <strong>de</strong> données 8 . Par contre, une provision<br />

d’entités sera créée pour pouvoir accélérer leur chargement le moment venu. Bien que cela puisse<br />

apparaître comme un mécanisme tordu, cela prend son sens dans un contexte où les accès à la base<br />

<strong>de</strong> données sont nombreux et éventuellement concurrentiels. Une politique d’optimisation complexe<br />

est déployée par <strong>Linq</strong> mais nous en reparlerons plus tard. Nous avons vu jusqu’ici le rôle d’un<br />

DataContext vis-à-vis <strong>de</strong>s entités, tant celles qui se trouvent en mémoire que celles qui séjournent<br />

dans les tables relationnelles. Nous verrons plus loin comment la théorie du mapping est mise en<br />

pratique et quel y est le rôle du DataContext.<br />

8 Il s’agit là d’une interprétation <strong>de</strong> diverses sources contradictoires. *11+ précise que chaque appel au<br />

DataContexte entraîne une réaction vers la base <strong>de</strong> données, sans préciser sa nature. [4] reste très flou. [1] dit<br />

clairement que pour une lecture, l’interaction n’est pas initiée par le programmeur.

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

Saved successfully!

Ooh no, something went wrong!