Techdays 2008, jour 1

Publié le 11 février 2008 par Olivier Duval

1er jour des Techdays 2008. Sont attendus 16 000 geeks personnes, avec plus de 300 sessions au programme, autant dire que cela va être dur de tout suivre. Lundi, j’ai pu suivre 3 sessions, boulot oblige.

La keynote fut agrémentée d’une démo (un flickr like) sur différents thèmes : plateformes, Linq, Astoria, SQL Server 2008, Silverlight, le tout monté par l’équipe Microsoft.

Un chiffre annoncé, selon une étude du cabinet Forrester, .NET dépasse J2EE en terme d’utilisation en entreprise avec respectivement 39 % et 35 % d’adoption.

Quelques notes prises, qui ne sont pas forcément bien structurées ou comprises, des idées, des astuces, à approfondir bien entendu.

ADO.NET Entities Framework

Session présentée par 2 consultants Winwise (Matthieu Mezil et Michel Perfetti). Chacun se répartit la session en Linq (requêtage objet) – eSQL (requêtage spécifique EDM) et ADO.NET Entities (ou EDM : Entity Data Model).

Le framework sera disponible courant juin 2008, pour l’instant on se contentera de la version Beta3 (CTP2).

EDM est ni plus ni moins un framework de mapping objet relationnel, tel qu’on peut le connaitre avec des ORM tels que NHibernate, ActiveRecord, ... sauf que c’est la solution proposée par Microsoft.

Quelles différences entre eSQL et Linq ? le premier (sous forme de chaines de caractères) permet d’effectuer des requêtes dynamiques (ie : donc paramétrables), le 2è est plus un langage d’interrogation objet, compilé (ie : et donc statique). Toutefois, pour Linq, une solution pour avoir des requêtes paramétrables : les requêtes compilées (CompiledQuery.Compile).

Selon le provider, eSQL génère le SQL propriétaire qui sera envoyé au moteur de base de données.

Simple, à partir d’un modèle de données en entrée (80 % des applications partent de cette base), génération d’une couche EDM (Entity Data Model) pour le mapping (classes, le modèle) et les opérations de CRUD. Plusieurs providers seront livrés : SQL Server, MySQL, Oracle, ...selon l’implémentation que feront les intéressés. Le modèle décrit est contenu dans un fichier .edmx

L’EDMX est réparti selon plusieurs sections :

  • CSDL : description des entités,
  • SSDL : description des données,
  • C-S mapping : le mapping entre les entités et les tables.

Le mapping peut être avancé : collections, types complexes, héritage (d’entités sur plusieurs tables [TPT : Table per Type] ou sur n entités sur une table [TPH : Table per Hierarchy, on aura un discriminant])...tout ce que l’on peut attendre d’un framework. Seule différence, pas de lazy loading, le chargement des collections (ie : associations n-m) doit être explicite (par un Load()).

La Cache tracking permet de garder l’état des objets modifiés grâce aux requêtes Linq (To SQL).

Ressources :

Javascript pas à pas, au trot, puis au grand galop

Javascript est devenu un langage important avec l’avènement du Web 2.0 et de la brique Ajax, il était important de se rappeler quelques bases.

Session présentée par Cyril DURAND , indépendant spécialiste en Javascript et ASP.NET.

Il est rappelé que JS est un langage orienté prototype et non objet. Un prototype : chaque objet a un lien caché vers son prototype, l’instance du prototype est partagé entre les objets (cela ressemble à l’héritage sans en être). Il est préférable d’utiliser les prototype que les closures, ces derniers étant plus gourmands en ressources mémoires (1 instance créée à chaque fois), un bench sur les 2 façons de faire1.

Un peu d’historique de ce langage, où la standardisation n’apparait qu’en 1998 pour donner naissance à l’EcmaScript (Javascript étant le nom [réservé] donné par Netscape). Depuis 1999, Javascript 1.5 supporté par la majorité des navigateurs. Depuis 2005-2006, Javascript 1.6, 1.7, et dans le futur, la 2.0 qui apporte le support objet (classe, ...).

tour d’horizon

6 types de base : Number (flottant codé sur 64 bits), String, Null, Undefined, Object, Boolean. Pour ce dernier tout ce qui n’est pas faux est vrai, les valeurs qui retournent false :

false,
undefined, // valeur retourné lorsqu'on tente d'accéder à une variable/propriété inexistante
null,
0,
''

Opérateurs :

  • === d’égalité strict, vérifie la valeur ET le type.
  • || retourne la 1ère valeur non fausse, voir l’explication sur le blog de Cyril
  • astuce avec l’instruction !!, voir chez Cyril

Gestion des exceptions, le catch permet d’ajouter des conditions.

Fonctions : il est conseillé de les déclarer sous forme de variable et non comme on peut le voir avec function(){} :

 var myfnc = function() { // };
var myfnc2 = function fct() {};

Objet :

  var p = { firstname: 'Olivier',
speak: function() { return this.firstname; }
}
var fnc = p.speak;

this se rapport au contexte appelant. Grâce au mot clé apply, on permet de changer de contexte.

On retrouvera sur son site, des billets sur les notions décrites :

  • Javascript, un langage incompris, une suite d’articles sur Javascript, reprenant les bases et subtilités du langages.
  • prototype
MS Ajax Library

Opensource, sous licence Microsoft Permissive License, il est surtout utilisé en conjonction avec ASP.NET AJAX Control Toolkit, ensemble de modules Ajax (autocompletion, modal, ...)

MS Ajax Library apporte des extensions à Javascript afin de se simplifier la vie pour développer avec ce dernier, avec notamment :

  • string.Format
  • registerClass
  • callBaseMethod
  • registerEnum
  • $get(‘id’) : au lieu du document.getElementById()
  • createDelegate
  • $addHandner() : ajouter un évènement sur un click, ...

Astuce : il suffit d’ajouter le mot clé debugger; dans le code JS afin que celui-ci soit débuggable sous Visual Studio.

ADO.Net Data Services (aka Astoria)

Session présentée par Pierre Lagarde et Mistu Futura2.

ADO.Net Data Services est prévu pour juin 2008, pour l’instant, la Beta (CTP) est fournie (ASP.Net Futures/Extensions). En gros, faire du REST (donc requêtes par dessus HTTP pour interroger des données). Cette couche vient au-dessus de LinqToSQL / Entities Framework, voir la session décrite au début du billet.

L’URL est du type : http://server/monservice.svc, on peut également l’enrichir de paramètres (filtres d’interrogation) : http://server/monservice.svc/Customers, http://server/monservice.svc?$filter=, ... Cela permet très simplement et sans code particulier côté serveur d’interroger son modèle de données, rien que d’y penser, ça donne envie.

Le retour peut être de 2 formes : XML ou JSON selon la sérialisation souhaitée3.

L’utilisation des interceptors (attribut QueryInterceptor(“requete”) à ajouter à la méthode du service) permet de sécuriser l’accès aux données, en restreignant les données à explorer.

Une utilisation avec un client non Web est aussi prévu. Dans ce cas, webdatagen.exe permettra de générer un proxy Astoria pour une utilisation dans un client Winform par exemple.

D’autres comptes-rendus

Sur le site de DotNetGuru

1 j’admets que je vais devoir me poser pour étudier ça de près, ça reste pour l’instant un peu abstrait…

2 Mitsu qui a travaillé chez nous en tant que consultant avant d’entrer chez Microsoft. Il nous avait développé avec talent à l’époque une 1ère version d’un ORM : dsMap, autant dire que les données ça le connait

3 la version 3.5 insére automatiquement un “d” avant la sérialisation des données en JSON, ceci afin de préserver une sécurité, liée à la possibilité d’Eval de l’expression JSON ramenée