QxOrm (le moteur) + QxEntityEditor (l'éditeur graphique) = la meilleure solution pour gérer sa couche de données persistante en C++/Qt !
QxOrm est une bibliothèque C++ de gestion de données.
A partir d'une simple fonction de paramétrage (que l'on peut
comparer avec un fichier de mapping Hibernate en Java), vous
aurez accès aux fonctionnalités suivantes :
- Persistance : support des bases de données SQLite, MySQL, PostgreSQL, Oracle, MS SQL Server, MongoDB (gestion des relations 1-1, 1-n, n-1 et n-n) ;
- Sérialisation des données (flux JSON, binaire et XML) ;
- Réflexion (ou introspection) pour accéder dynamiquement aux classes, attributs et invoquer des méthodes ;
- Serveur web HTTP : serveur web compatible HTTP 1.1 autonome, performant, multi-plateforme et simple d'utilisation ;
- API JSON : interopérabilité avec d'autres technologies que C++/Qt (web services REST, applications QML, langages de script).
|
QxOrm library has been accepted into the Qt Ambassador Program
|
QxEntityEditor est un éditeur graphique pour la bibliothèque QxOrm : QxEntityEditor permet de gérer graphiquement le modèle d'entités.
QxEntityEditor est multi-plateforme (disponible pour Windows, Linux et Mac OS X) et génère du code natif pour tous les environnements : bureau (Windows, Linux, Mac OS X), embarqué et mobile (Android, iOS, Windows Phone, Raspberry Pi, etc.).
Un manuel utilisateur (documentation) dédié à l'application QxEntityEditor est disponible.
QxEntityEditor est basé sur un système de plugins et propose diverses fonctionnalités pour importer/exporter le modèle de données :
- génération automatique du code C++ (classes persistantes enregistrées dans le contexte QxOrm) ;
- génération automatique des scripts SQL DDL (schéma de base de données) pour les bases SQLite, MySQL, PostgreSQL, Oracle et MS SQL Server ;
- supporte l'évolution du schéma de base de données pour chaque version d'un projet (ALTER TABLE, ADD COLUMN, DROP INDEX, etc.) ;
- génération automatique des classes C++ de services pour transférer le modèle de données sur le réseau, en utilisant le module QxService, pour créer rapidement des applications client/serveur ;
- importation automatique des structures de bases de données existantes (par connexion ODBC ou pilote natif) pour les bases SQLite, MySQL, PostgreSQL, Oracle et MS SQL Server ;
- parce que chaque projet est différent, QxEntityEditor propose plusieurs outils pour personnaliser les fichiers générés (notamment un moteur javascript et un débogueur intégré).
La bibliothèque 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 mapping XML ;
- 1 seul fichier <QxOrm.h> à inclure dans l'en-tête
précompilé (precompiled-header recommandé 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++ sous Windows,
GCC sous Linux, Clang sous Mac OS X, et MinGW sous Windows (d'autres environnements et
plateformes seront testés prochainement : mobiles, etc...) ;
- compatible avec le développement de bibliothèques partagées
(shared library, *.dll pour Windows, *.so pour Linux,
etc...).
QxOrm est basé sur la bibliothèque Qt (compatible Qt4, Qt5, Qt6) :
|
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 puis Digia 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://www.qt.io/ |
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,
std::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 (ou introspection) présent nativement dans d'autres langages
(Java, C#, etc...) pour utiliser toutes les fonctionnalités de
QxOrm.
QxModelView :
toute classe enregistrée dans le contexte QxOrm peut être utilisée par le moteur model/view de Qt (Qt widgets et/ou vues QML).
L'interface qx::IxModel expose automatiquement au moteur QML toutes les propriétés définies dans le contexte QxOrm.
Ce module permet ainsi de faciliter l'intéraction entre QML et les bases de données.
QxService : basé sur le moteur QtNetwork de Qt, ce module
permet de créer de manière simple et performante un serveur d'applications en C++ (notion de services avec demande du client et réponse du serveur). QxService utilise la serialization et l'introspection des données
et fonctions pour pouvoir faire transiter sur le réseau n'importe quelle classe ou structure. Pour plus d'informations sur ce module, un tutoriel est disponible en cliquant ici.
QxCollection<Key, Value> : cette collection thread-safe permet de cumuler
les avantages d'un std::vector<T> (conserve l'ordre
d'insertion + accès rapide par index) et d'un
std::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 : Toute classe définie par QxOrm
peut être sérializée dans un flux binaire, XML et JSON. Ce module permet
également de cloner toutes les instances d'objet. Les principaux
objets de la bibliothèque 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 la bibliothèque standard 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 bibliothèque 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.
QxValidator : ce module permet d'ajouter des contraintes
sur les propriétés enregistrées dans le contexte QxOrm. Ces contraintes sont définies dans la méthode de mapping : void qx::register_class.
Si pour une instance de classe donnée, au moins une contrainte n'est pas respectée, alors l'instance est considérée comme invalide :
l'objet ne peut alors pas être sauvegardé en base de données (INSERT ou UPDATE). Pour plus d'informations sur le module QxValidator,
rendez-vous sur le manuel utilisateur de la bibliothèque 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 et QxEntityEditor en cliquant ici.
Un manuel utilisateur pour apprendre à travailler avec la bibliothèque QxOrm est disponible en cliquant ici.
Un exemple rapide d'utilisation de QxOrm montrant les fonctionnalités de base de la bibliothèque
est disponible en cliquant ici.
Un forum (en anglais) dédié à QxOrm et QxEntityEditor est disponible en cliquant ici.
Vous pouvez également retrouver la communauté française de QxOrm et QxEntityEditor sur le forum de Developpez.com.
Une documentation en ligne du code source de la bibliothèque QxOrm est disponible en cliquant ici.
|