QxOrm est une librairie C++ de gestion de données.
QxOrm a pour ambition d'être utilisé dans de nombreux projets, à la
fois open-source et professionnels.
A partir d'une simple fonction de paramétrage (que l'on peut
comparer 'modestement' avec un fichier de mapping Hibernate), vous
aurez accès aux fonctionnalités suivantes :
- persistance : communication avec de nombreuses bases de
données (avec support des relations 1-1, 1-n, n-1 et
n-n)
- serialization des données (flux binaire et xml)
- reflection pour accéder aux classes, attributs
et invoquer des méthodes
QxOrm a pour objectif de simplifier le code C++ tout en offrant un
maximum de fonctionnalités.
Voici les principaux avantages de QxOrm :
- non intrusif : la fonction de paramétrage se trouve à
l'extérieur des classes. La signature des classes n'est donc pas
modifiée. QxOrm peut donc être utilisé dans des projets
existants
- aucune nécessité d'appartenir à une hiérarchie de
classes : les classes n'ont pas besoin de dériver d'un 'super
objet'
- pas de génération automatique de code
- pas de mapping xml
- 1 seul fichier <QxOrm.h> à inclure dans l'en-tête
précompilé (precompiled-header nécessaire pour optimiser les temps
de compilation)
- aucune nécessité d'utiliser le pré-compilateur 'moc' fourni
par Qt
- vérification des types à la compilation (utilisation intensive
de méta-programmation)
- compatible avec Visual C++ 2008 ou 2010 sous Windows et
GCC 4.4.1 sous Linux (d'autres environnements et
plateformes seront testés prochainement : Mac, mobiles, etc...)
- compatible avec le développement de librairies partagées
(shared library, *.dll pour Windows, *.so pour Linux,
etc...)
QxOrm est dépendant des excellentes librairies
boost (compatible à partir de la version 1.38) et Qt
(compatible à partir de la version 4.5.0) :
 |
boost : de nombreux modules de la
librairie boost font partie de la nouvelle norme C++.
C'est une librairie reconnue pour sa qualité, son code 'C++
moderne', sa documentation, sa portabilité, etc...
QxOrm utilise les fonctionnalités suivantes de boost :
smart_pointer, serialization, type_traits,
multi_index_container, unordered_container, any, tuple,
foreach, function.
Il est conseillé d'installer et d'utiliser la dernière version
de boost disponible à l'adresse suivante : http://www.boost.org/ |
 |
Qt : bibliothèque complète : IHM
(QtGui), réseau (QtNetwork), XML (QtXml), base de données
(QtSql), etc...
La documentation est excellente et le code C++ écrit à partir
de cette bibliothèque est à la fois performant et simple de
compréhension.
Depuis le rachat par Nokia et sa nouvelle licence LGPL, Qt est
sans contexte la bibliothèque phare du moment.
QxOrm est compatible avec les principaux objets définis par Qt
: QObject, QString, QDate, QTime, QDateTime, QList, QHash,
QSharedPointer, QScopedPointer, etc...
Il est conseillé d'installer et d'utiliser la dernière version
de Qt disponible à l'adresse suivante : http://qt.nokia.com/ |
QxOrm est divisé en sous-modules, voici un descriptif rapide :
QxDao : basé sur le moteur QtSql de Qt, ce module
permet de communiquer (sélection, modification, suppression,
transaction, etc...) avec de nombreuses bases de données en mappant
chaque champ d'une table avec les propriétés d'une classe C++. Les
relations de type 1-1, 1-n, n-1 et n-n sont très simples à
mettre en place dans le code C++. Ce module supporte la
programmation objet : héritage, polymorphisme, composition,
association ainsi que les collections (support des collections de
stl, boost et Qt : std::vector, std::list,
boost::unordered_map, QList, QHash, etc...).
QxRegister, QxDataMember et QxFunction : même si
ce n'est pas le but 1er de QxOrm, il est nécessaire d'émuler le
mécanisme de reflection présent nativement dans d'autres langages
(Java, C#, etc...) pour utiliser toutes les fonctionnalités de
QxOrm.
QxCollection<Key, Value> : basé sur
boost::multi_index_container, cette collection permet de cumuler
les avantages d'un std::vector<T> (conserve l'ordre
d'insertion + accès rapide par index) et d'un
boost::unordered_map<Key, Value> ou encore QHash<Key,
Value> (accès rapide par clé : hash-map). Ce type de collection
est particulièrement adapté pour contenir les éléments issus d'une
base de données.
QxSerialize : ce module s'appuie sur l'excellente
librairie boost::serialization. Toute classe définie par QxOrm
peut être sérializée dans un flux binaire et xml. Ce module permet
également de cloner toutes les instances d'objet. Les principaux
objets de la librairie Qt (QObject, QString, QDate, QTime,
QDateTime, QList, QHash, etc...) sont compatibles avec le module
QxSerialize. Ce module assure une compatibilité ascendante avec
prise en compte d'un n° de version par classe.
QxFactory : toute instance d'objet définie par QxOrm
peut être créée en fonction du nom de la classe.
QxTraits : ce module contient une liste de classes de
traits non définies dans boost et qui sont utiles pour
l'utilisation de QxOrm. Ces classes de traits se veulent génériques
et peuvent donc être utilisées dans d'autres contextes que celui de
la librairie QxOrm.
QxCache : le 'cache' de QxOrm peut contenir tous types
d'objets. Il peut permettre par exemple de mémoriser des données
issues d'une base de données pour éviter des requêtes trop
fréquentes. Ce cache est générique et peut être utilisé dans d'autres contextes que
celui de QxOrm.
QxMemLeak : permet une détection rapide des fuites
mémoire en mode Debug une fois l'exécution du programme terminée
(avec indication du fichier et de la ligne => style MFC de
Microsoft). Ce module a été développé par Wu Yongwei et a subi
quelques modifications pour être intégré dans QxOrm. Si un autre
outil est déjà utilisé dans vos projets (Valgrind par exemple),
cette fonctionnalité ne doit pas être activée.
Par défaut, le module QxMemLeak est désactivé.
Vous pouvez télécharger la dernière version de QxOrm en cliquant ici.
Un exemple rapide d'utilisation de QxOrm montrant les fonctionnalités de base de la librairie
est disponible en cliquant ici.
Un forum dédié à QxOrm est disponible en cliquant ici.
Pour informations et afin de pouvoir faire une comparaison, voici
une liste d'autres librairies permettant de mapper des classes C++ avec des
bases de données :
|