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
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.