lundi 10 mai 2010

DB4O - Un système de persistance d'objet pour C#

Voici encore un sous projet de "Mono Project". Cette fois, au lieu de s'attaquer à Windows Communication Framework (projet Olive), le projet dbo4 s'attarde sur la persistance des objets.

db4o est un système de persistance (sauvegarde sous dans un fichier ou flux) non intrusif permettant de stocker n'importe quel object complexe en une ligne de commande.
Lorsqu'un objet est stocké, le diagramme des classes de l'application est analysé et ajusté en temps réel.
La fonctionnalité d'interrogation des objets (Object-oriented querying) est assuré via Native Queries (NQ).
Il est possible de faire des requêtes sur la DB en utilisant la syntaxe et la sémantique .Net (concept similaire a LINQ/DLINQ) ou encore le concept Query by Example (QBE) qui utilise des objets prototypes pour les faire requêtes.
db4o assure de hautes performance grâce à l'indexation de champs et en réduisant au minimum l'utilisation des redirection sur le-fichier-de-donnée-interne-de-la-DB.
db4o supporte les transactions ACID (Atomicité, Cohérence, Isolation, Durabilité), un mode "single-user embedded" et des accès Client/Server multi-transactionel.
db4o s'utilise localement ou via TCP, supporte la réplication orienté-objet et ObjectManager pour naviguer dans les fichiers de la DB... et plus encore

Voici un exemple de code issu du site du projet:
using System;
 
using Db4objects.Db4o;
 
public class Test {
 
    static string _file = "store.db4o";
 
    // A very basic db4o example that demonstrates
    // automatic schema generation and Query-By-Example
    public static void Main (string [] args)
    {
        using (IObjectContainer db = Db4oFactory.OpenFile (_file)) {
            db.Set (new Pilot ("Michael Schumacher", 101));
            db.Set (new Pilot ("Rubens Barrichello", 99));
            db.Commit ();
 
            IObjectSet pilots = db.Get (new Pilot(null, 101));
            foreach (Pilot p in pilots) {
                Console.WriteLine (p);
            }
        }
    }
}
 
public class Pilot {
 
    string _name;
    int _points;
 
    public Pilot (string name, int points)
    {
        _name = name;
        _points = points;
    }
 
    public override string ToString ()
    {
        return _name + "/" + _points;
    }
}

Aucun commentaire: