DBConcept - Documentation pour les développeurs

Accès au code source

L'archive distribuée contient l'exécutable et le code source. Ce dernier est également accessible via le SGV git :

git clone git://git.tuxfamily.org/gitroot/dbconcept/dbconcept.git

Intégration

DBConcept est conçu pour être intégré dans d'autres projets. Il est développé en langage Haxe et supporte ainsi de nombreuses plateformes d'exécution. De plus, la bibliothèque Javascript - en ligne peut être intégrée dans une page web (sa taille est inférieure à 150 kio).

DBConcept expose une API dont les principales fonctions sont :

  • Analyse du code source et génération du diagramme :
    source.Mocodo.load(texteSource : String) : Diagram
  • Génération du modèle logique de données :
    transform.DiagramToMLD.transform(dia : Diagram) : MLD
  • Initialisation des attributs de navigation, des constructeurs et des accesseurs des classes du diagramme :
    transform.DiagramToUML.transform(dia : Diagram)
    Cette étape est un prérequis pour le tracé des schémas UML et la génération de code (cf concepts de la programmation orientée objets).

Les fonctions de génération des schémas sont les suivantes :

  • Un objet de la classe MLD dispose de la méthode toString(auFormatUniv : Bool) qui renvoie le modèle relationnel au format Éducation Nationale ou Universitaire.
  • schema.MCDToSVG.generateSVG(dia : Diagram) : Xml
    L'objet de la classe Xml obtenu (de type SVG) dispose de la méthode toString().
  • schema.MLDToSVG.generateSVG(mld : MLD, avecTypes : Bool) : Xml
  • schema.UMLToSVG.generateSVG(dia : Diagram, deClasse : Bool, voirPrive : Bool) : Xml
    Un diagramme de domaine est obtenu avec deClasse=false et voirPrive=true.

Les fonctions de génération de code SQL sont :

  • database.DBMariaDB.generateSQL(mld : MLD) : String
  • database.DBPostgreSQL.generateSQL(mld : MLD) : String
  • database.DBSqlite.generateSQL(mld : MLD) : String

Les fonctions de génération de code (divers langages de programmation) sont :

  • code.HaxeCode.generate(diagram : Diagram) : StringMap<String>
    L'objet retourné a une propriété h qui est un tableau associatif / dictionnaire, dont les clés sont les noms de fichiers et les valeurs leurs contenus.
  • code.JavaCode.generate(diagram : Diagram) : StringMap<String>
  • code.PythonCode.generate(diagram : Diagram) : StringMap<String>

Informations techniques

Prérequis pour la compilation

L'application web (DBConcept Online), distincte de DBConcept est développée en HTML, CSS et Javascript, sans utilisation de cadriciel.

Le SDK Haxe, version 4.1 au minimum est requis pour compiler DBConcept, quelle que soit la cible.

  • C++ :

    • bibliothèque additionnelle Haxe "hxcpp" : haxelib install hxcpp
    • sous Linux : compilateur GCC, sous Windows : compilateur MSVC
  • HashLink/C :

    • bibliothèque additionnelle Haxe "hashlink" : haxelib install hashlink
    • sous Linux : compilateur GCC, sous Windows : compilateur MSVC
    • machine virtuelle HashLink
  • Java :

    • bibliothèque additionnelle Haxe "hxjava" : haxelib install hxjava
    • OpenJDK
  • Neko : /
    Note : Neko ne supporte pas la nouvelle API UnicodeString.

  • Node.js : bibliothèque additionnelle Haxe "hxnodejs" : haxelib install hxnodejs
    Note : L'API d'accès aux bases de données diffère de celle de la bibliothèque standard (non implémentée en Node.js). Les fonctionnalités de génération et de rétroconception de bases de données sont donc désactivées.
  • PHP : /
  • Python : /
    Note : L'API d'accès aux bases de données n'est pas implémentée dans la bibliothèque standard pour le Python. Les fonctionnalités de génération et de rétroconception de bases de données sont donc désactivées.
  • Web / Javascript : /

Prérequis pour le contrôle de la qualité

  • Tests unitaires : bibliothèque additionnelle Haxe "utest" : haxelib install utest
  • Qualité du code : bibliothèque additionnelle Haxe "checkstyle" : haxelib install checkstyle

Construction et installation

La construction et l'installation utilise un fichier Makefile ;

make / make cpp	- construit l'exécutable out/cpp/dbconcept

make all	- compile le programme pour toutes les plateformes
make java	- construit l'archive out/java/dbconcept.jar
make neko	- génère out/neko/dbconcept
make web	- génère out/web/*

make install	- installe l'exécutable out/cpp/dbconcept (les paramètres "DESTDIR" et "PREFIX" sont supportés)
make uninstall

make clean	- efface les fichiers *générés*
make test	- lance les tests unitaires
make checkstyle	- vérifie la qualité du code

Il reste possible de construire le programme sans utiliser le fichier Makefile, par exemple en Java, avec la commande :

haxe -cp src -main DBConcept -java-lib java-lib/*.jar -java out/java

Les cibles HashLink/C, Node.js et Python sont pour le moment désactivées en raison d'incompatibilités dans le support des bases de données.

Prérequis pour l'exécution

  • C++ : /
  • HashLink/C : machine virtuelle HashLink
  • Java : JRE + pilote(s) JDBC
  • Neko : machine virtuelle Neko
  • Node.js : interptéteur Node.js
  • PHP : interpréteur PHP
  • Python : interpréteur Python
  • Web / Javascript : navigateur web (Chromium, Firefox, ...)

Organisation des fichiers

  • Le code source du programme est dans le dossier src :

    • Le fichier DBConcept.hx est le point d'entrée du programme en ligne de commande.
    • Le sous-dossier (paquetage) model contient les classes métier :

      • communes : Obj et Field ;
      • modèle relationnel : MLD, Relation, ForeignKey et MergedFK ;
      • MCD et UML : Diagram, Set (entité et classe), Association, Link (patte d'association), Method;
    • Le sous-dossier source contient la classe utilitaire Mocodo d'import-export de description textuelle.

    • Le sous-dossier schema contient les classes utilitaires permettant de générer les diagrammes SVG ; les classes Svg et Line sont communes.
    • Le sous-dossier database contient les classes utilitaires pour la génération (ou la rétroconception) de bases de données.
    • Le sous-dossier code contient les classes utilitaires pour la génération de code.
    • Le sous-dossier graph contient les classes (et adaptateurs) pour le positionnement automatique des objets d'un graphe.
  • Le dossier web contient l'interface web de l'application en ligne.

  • Le dossier web-lib contient les bibliothèques Javascript additionnelles :

  • Le dossier tests contient les classes utiles aux tests unitaires ; ils sont écrits en utilisant la bibliothèque UTest.

  • Le fichier Makefile contient les recettes (construction, tests, ...), sitegen.json la configuration pour la génération du site web, checkstyle.json le paramétrage pour le contrôle de qualité du code et build.hxml le paramétrage de Visual Studio Code.
  • Le dossier doc contient la documentation (utilisateur, développeurs, journal des changements, licence et exemples).
  • Le dossier java-lib contient les connecteurs JDBC (bibliothèques externes), et js-lib les bibliothèques Javascript externes.