Rss Feed

Présentation de SOFA un ORM Air pour SQLite

Nous sommes en train de développer en interne un ORM SQLite pour Adobe AIR : SOFA. Nous avons décidé de le passer en open source prochainement. Il supporte le « nested fetching » , les delete et save en cascade , les formulas, les clefs composites, les relations one to one, one to many et many to many, l’héritage etc … Ce n’est pas une implémentation du pattern ActiveRecord : nous avons choisi de nous rapprocher plus d’un ORM comme hibernate qui même si il nécessite plus de configuration (bien plus) permet une plus grande souplesse dans de gros projets. Il n’y a pas de support pour les conventions pour l’instant mais pourquoi pas dans une prochaine release. Voilà un exemple de SofaQL :

Family family = sofaManager
  .createQuery("load Family <=> f where f.id = :id; fetch Family.people")
  .setIntegerArgument("id", 1)
  .execute();

Donnera :

Handle load : load Family
executing :
 select Family.ID as Family_0_id, Family.NAME as Family_0_name
 from FAMILY Family
 where Family.ID = 1
fetching : fetch Family.people
executing :
 select Person.ID as Person_0_id, Person.NAME as Person_0_name,
 Person.ID as Person_0_id, Person.FAMILY_ID as Person_0_familyId
 from ( ( People Person inner join  SuperPeople SuperPerson
 on SuperPerson.ID = Person.ID ) Person ) Person
 where Person.FAMILY_ID = 1
result =
 (Family)#0
  id = 1
  name = "pezel"
  people = (mx.collections::ArrayCollection)#1
   filterFunction = (null)
   length = 1
   list = (mx.collections::ArrayList)#2
    length = 1
    source = (Array)#3
     [0] (Person)#4
      familyId = 1
      id = 1
      name = "arnaud"
    uid = "A126F4E4-D083-68E2-0F34-723C76CA1A9C"
  sort = (null)
  source = (Array)#3

Ici Person est une sous class de SuperPerson. Le gros avantage comparé à un framework du type ActiveRecord c’est qu’il est possible de récupérer un objet et tous ses fils en une requête (et ceci récursivement). Dans le cas de listes cela peut s’avérer très pratique. De plus un support du batch fetching (récupération par groupe) est prévu dans la prochaine mise à jour.
Les save obéissent au même mécanisme, des cascade sont spécifiées par défaut mais peuvent être désactivées.

La dernière requête n’est pas très propre mais elle permet de supporter l’héritage à n-niveaux.

Tout ça devrait être disponible très prochainement sur google code. Stay tuned !

Partager :
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • LinkedIn
  • Technorati
  • Twitter

Articles sur le même sujet :

  1. Application AIR pour la gestion du site e-commerce
  2. Progiciel pour Tour Opérateur – AIR / Flex
  3. Magento e-commerce : Flash, Flex et AIR

Laisser un commentaire

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word