Gérer ses données en C++


précédentsommairesuivant

II. Spécification des fichiers/dossiers/projets

Comme dans tout projet, nous allons définir notre organisation :

  • Les utilitaires "maisons" seront stockés dans une bibliothèque statique que nous appellerons kinUtils. Elle s'enrichira au fur et à mesure des besoins
  • La gestion des données sera implémentée dans une autre bibliothèque statique appelée kinGesDatas, composée essentiellement de classes modèles (Template).
  • Les données métiers viendront alors dans une bibliothèque, toujours statique (mais nous la passerons en DLL), nommée kinBusiness
  • Puis enfin un petit projet de tests unitaires, kinTestApp, exécutable

II-A. Définition des répertoires

Je vous conseille de créer un répertoire, avec pour chaque projet un sous répertoire et aussi un dossier nommé "lib" afin d'accueillir les bibliothèques compilées. Nous utiliserons également des bibliothèques externes, je vous laisse librement vous organiser dans vos dossiers/fichiers à savoir que la procédure pour indiquer au compilateur où il pourra trouver ces éléments (fichiers include et lib) est la même que pour nos bibliothèques à nous.

II-B. Création de la solution, configuration des projets

Créez donc quatre projets et définissez le projet de test comme projet de démarrage.

Image non disponible


Configurez maintenant les projets selon ce tableau (à noter que les bibliothèques seront compilées en Debug et en Release. Les projets utilisateurs utiliseront la version Debug en compile Debug et la version Release en compile Release).

Projet Type de projet Fichier de sortie Dépendances supplémentaires
kinUtils Bibliothèque statique (.lib) Debug : $(SolutionDir)\lib\$(ProjectName)d.lib
Release : $(SolutionDir)\lib\$(ProjectName).lib
Debug : kinUtilsd.lib
Release : kinUtils.lib
kinGesDatas Bibliothèque statique (.lib) Debug : $(SolutionDir)\lib\$(ProjectName)d.lib
Release : $(SolutionDir)\lib\$(ProjectName).lib
Debug : kinGesDatasd.dll
Release : kinGesDatas.dll
kinBusiness Bibliothèque statique (.lib) Debug : $(SolutionDir)\lib\$(ProjectName)d.lib
Release : $(SolutionDir)\lib\$(ProjectName).lib
Debug : kinBusinessd.lib
Release : kinBusiness.lib
kinTestApp Application (.exe) Debug : kinBusinessd.exe
Release : kinBusiness.exe
Par défaut


Lors que vous inclurez le fichier

 
Sélectionnez
#include <kinUtils/UnFichierTresUtil.h>


Il faut indiquer au compilateur où il pourra le trouver le répertoire kinUtils, étant donné qu'une bibliothèque est destinée à être utilisée par plusieurs projets, son emplacement appartient à une configuration à l'échelle de la machine du développeur. Spécifiez donc dans les options de l'IDE un répertoire include additionnel, dans notre cas celui de la solution.

De même pour lier les bibliothèques, il faut que le compilateur puisse savoir où se trouvent ces fichiers "*.lib" requis à l'édition des liens. Ajoutez un répertoire de bibliothèque dans les options de Visual Studio, ici ce sera le répertoire "lib"

Et pour terminer, il faut indiquer l'ordre de génération des projets. kinTestApp utilise kinBusiness qui utilise kinGesDatas qui utilise kinUtils. Donc, l'ordre de génération est :

  • kinUtils
  • kinGesDatas
  • kinBusiness
  • kinTestApp

II-C. Tests

Testons maintenant tout ça. Créez une classe dans chaque bibliothèque qui utilisera la classe de la bibliothèque dont elle dépend (par exemple kinBusiness instanciera et appellera la méthode de la classe proposée par kinGesDatas). Puis compilez tous les projets, vous obtiendrez cette ligne.

========== Régénération globale : 8 a réussi, 0 a échoué, 0 a été ignoré ==========

Notre répertoire lib ressemble désormais à ceci :

Image non disponible

Une fois l'organisation en place, vous pouvez supprimer tous les fichiers sources, il ne nous serviront plus.

II-D. Les espaces de noms

Nous nous sommes organisés au niveau des fichiers, des projets mais pas au niveau du code. En effet, nous sommes dans une espèce de jungle et nous allons déterminer notre terrain, "kin", qui sera à son tour décomposé en trois sous-espace, un par librairie.

Image non disponible

Voici un rappel sur l'utilisation des espaces de noms en C++. Dans ce code :

 
Sélectionnez
std::cout << "Un message";

La fonction cout est incluse dans la librairie standard, sous l'espace de noms std.

Pour utiliser nos codes, soit nous indiquons les espaces de noms explicitement :

 
Sélectionnez
kin::utils::UneClasseTresUtile obj

Soit en indiquant au compilateur que l'on utilise cet espace de noms

 
Sélectionnez
using namespace kin::utils;
UneClasseTresUtile obj

Attention dans l'utilisation des using namespace XXX. En effet, ils ne doivent être définis que dans les fichiers sources (.cpp) et non d'inclusions (.h ou .inl) au risque de briser l'encapsulation des espaces de noms.

Dans les portions de codes proposés dans cet article, j'ai volontairement omis ces espaces de noms pour ne pas alourdir l'essentiel, mais ils sont présents dans les sources disponibles dans la section Téléchargement.

II-E. Conclusion

L'organisation est très importante, ne soyons pas pressé d'aller directement dans le code. Avec cette disposition, nous obtenons un endroit spécifique aux utilitaires, un autre dédié à la gestion de données, puis le troisième aux données métier et enfin le projet utilisateur. Chaque "partie" du projet est donc encapsulée à sa juste place, nous pouvons désormais attaquer les outils.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Aurélien FILEZ Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.