Revue du Web du 19 avril

Les tweets de la semaine

http://twitter.com/atheken/statuses/12038918061 un framework de DAL pour Mono en C# marchant avec SqlLite, c’est notre projet de la semaine

http://twitter.com/ufukkilic/statuses/12037707645 dotCover un nouvel outil de JetBrains

http://twitter.com/Pete_Brown/statuses/12055857669 les nouvelles fonctionnalités de WPF 4

La question Stackoverflow

http://stackoverflow.com/questions/1879672/what-exactly-is-the-windows-appfabric beaucoup de personnes se posent : AppFabric c’est quoi ? Une tentative de clarification. On regrette juste la disparition de Velocity en tant que module de cache indépendant.

Actualités Microsoft 

Avril, le quatrième mois de l’année aura été aussi le mois du chiffre 4 chez Microsoft : 4ème version du framework mais aussi Silverlight 4 et bien sûr Visual Studio 2010. On retrouvera une impressionnante série de vidéos sur les nouveautés du framework sur Channel 9 :

VS2010

Actualités “Alt.NET”

On évoquait dans la revue de la semaine dernière les “Domain Events” et depuis Greg Young a mis en ligne des documents détaillant l‘architecture autour de l’“Event Sourcing”. Après avoir rappelé les limites des architectures typiques autour de services et les avantages de l’utilisation des events comme mécanisme de stockage, il décrit plus en détails les principes de cette architecture comme la simplicité du stockage, l’historique exhaustif des modifications ou encore le concept de “Rolling Snapshots”. En effet si on ne stocke plus l’état courant d’un objet mais l’ensemble des évènements qu’il a connu, quand on requête la base pour le retrouver il faut rejouer ceux-ci. Pour optimiser cette lecture on peut alors passer par des clichés de l’objet à certains moments. Enfin il termine par analyser les interfaces utilisateurs construites autour de tâches à effectuer (corriger une adresse, soumetter une demande de prêt, …) en lieu et place de nos habituels CRUD.

De l’autre côté 

L’équipe de développement de The Onion explique le passage de Drupal (CMS en PHP) à Django (Python). Il semble que la migration s’est faite par un souci de simplifier la base de code dispersée entre PHP et Python. Un gain en vitesse, maintenance et stabilité semble donner raison à cette migration. On retiendra l’utilisation de la partie administration de Django souvent mise en avant, pour cause elle a sauvé deux mois de développement à l’équipe. L’architecture utilise maintenant PostgrSql en lieu et place de MySql, haproxy comme Load Balancer et nginx comme reverse proxy. Enfin l’équipe est composée de 4 personnes en télé-travail.

Les développeurs .NET peuvent utiliser IronPython, Google a un site regroupant des cours gratuits sur le langage.

Un projet

Entify est un projet issu du travail d’un développeur finlandais, Lauri Taimila, qui est un framework ORM un peu particulier dans le sens où il ne vise pas le marché des applications d’entreprises mais celui des applications de bureau et mobile. Il utilise SQLite comme moteur de base de données, il tourne sous la CLR de Microsoft et Mono, une version compatible MonoTouch est disponible (on peut donc l’utiliser dans le développement iPhone), enfin un designer pour MonoDevelop est fourni.

On doit se procurer Mono et MonoDevelop. Le binaire prend la forme d’une dll de 61 Ko sans dépendances externes à part SqlLite de Mono, comme le confirme un petit tour dans Reflector :

Entify dans Reflector

On peut installer MonoDevelop dans une image virtuelle VMWare OpenSuse fournie par Novell pour un autre produit (Mono Tools for Visual Studio).

Voici notre application de test :

MonoDevelop IDE

le formulaire de test

Un designer permet de spécifier les entités (une classe partielle peut être générée pour ajouter du code), on y trouve aussi la définition des associations et des propriétés sur lesquelles on peut définir des règles de validation (personnalisées ou non) :

la diagramme de classe

Un zoom sur la définition des règles de validation :

 définition de règles de validation Voici un exemple d’utilisation de l’API :

//on utilise sqllite en local

EntityContextSettings settingsEntify = new EntityContextSettings()

{

PersistentStoreLocation = "/home/rupert/myFormDB.entifydb",

EnforceValidationRules = true,

ContextName = "Main",

InMemory = false

};

//creation du contexte entify

EntityContext context = EntityContextFactory.GetContext(settingsEntify);

var customer = new Customer();

customer.Id = Guid.NewGuid();

customer.Birthday = datbirthDate.Date;

customer.Firstname = firstNameTxtBX.Text;

customer.Lastname = lastNameTxtBX.Text;

customer.Email = emailTxtBX1.Text;

try

{

//prend un snapshot avan modification

long snapshotAfter = context.TakeSnapshot();

//on peut pas ajouter une nouvelle adresse directement

//il faut passer par le Add au context

//customer.Adresses.Add(new Address{ City= "Montreal" });

var address = new Address{ Id= Guid.NewGuid() ,City= "Montreal" };

context.Add(address);

customer.Adresses.Add(address);

//ajoute l' entite => validation

context.Add(customer);

//autres actions sur le context

//(...)

var customers = context.GetAll<Customer>();

}

catch(ValidationException exe)

{

ValidationResults r = exe.ValidationResults;

var dialog = new MessageDialog(this,

                               DialogFlags.Modal,

                               MessageType.Error,

                               ButtonsType.Ok,

                               exe.Message);

dialog.Show();

//context.RevertToSnapshot(snapshotAfter);

}

Le framework gère aussi une API simple de requêtage avec filtre et pagination. La possibilité de prendre des cliché de la base est intéressante dans le cadre de suivi de modifications avant un renvoi vers un serveur. Cette librairie est certes simple mais pour des utilisations bien ciblées (iPhone, applications de bureau indépendantes) elle reste séduisante.

billet publié dans les rubriques coding le