IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

DataModule: un seul ou plusieurs


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 258
    Points : 156
    Points
    156
    Par défaut DataModule: un seul ou plusieurs
    Juste une petite question sur votre expérience. Perso, je ne fais qu'un DataModule avec tout dedans. Mais est-ce la meilleure manière? Qu'en pensez-vous?

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    C'est aussi comme ça que je procède.

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut Re: DataModule: un seul ou plusieurs
    Citation Envoyé par eponette
    Juste une petite question sur votre expérience. Perso, je ne fais qu'un DataModule avec tout dedans. Mais est-ce la meilleure manière? Qu'en pensez-vous?
    Ca depend du type d'applications.

    Si l'application a peu de form/frame 1 seul datamodule c'est suffisant.
    Des que l'application commence à en avoir beaucoup (form/frame) pour eviter des milliers de lignes de code dans le datamodule, il est préférable d'en avoir plusieurs.

    Pour ma part j'ai créé une application avec un Datamodule général (Connexion + fonctions/procédures communes), et des datamodules enfant par frame lié au général avec leurs tables/query et toutes leurs fonctions/procédures.

    Mais bon, ce n'est qu'un avis perso.

  4. #4
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 564
    Points : 3 968
    Points
    3 968
    Par défaut
    Bonjour

    Je vais soulever plusieurs points (liste sans doute non exhaustive) qui vont à l'encontre de la définition d'un seul DataModule.

    Cohérence de la structure du projet
    Je pense que ce n'est pas une bonne pratique si ton application est de taille importante ou peut le devenir. En effet si tu décris toutes les règles de gestion des objets du Datamodule dans celui-ci, cela va augmenter rapidement sa taille et rendre difficile sa compréhension et donc sa maintenance.
    Le partage du DataModule entre plusieurs fiches induit un couplage très fort et peut amener à faire des hypothèses sur un objet A utilisé par une fiche B qui s'avèront inadaptées pour une fiche C qui utilise aussi A. Cela peut nuire à l'évolutivité de ton projet.


    Cas du partage des sources
    Autre aspect du problème, dans une application mettant en jeu une équipe de développeurs, le fait de partager ton DataModule entre plusieurs fiches peut devenir un goulot d'étranglement car plusieurs développeurs peuvent être amenés à le modifier simultanément. Si le source est verrouillé par un développeur, un autre développeur devra attendre son tour, cela peut être générateur de dérive en temps et aller contre la philosophie RAD. Cette remarque prévaut aussi pour les unités "globales" trop fréquentes dans les projets que j'ai pu avoir en maintenance à mon sens.

    Temps de chargement
    Si tu places tous tes composants non-visuels dans un seul DataModule, ceux-ci seront créés systématiquement au démarrage de ton application dès lors que ton DataModule est chargé, d'où un temps de chargement élévé et une consommation importante de mémoire. La question est : est-ce que tous ces composants sont nécessaires à chaque exécution ?

    Ma réponse est qu'il vaut mieux travailler avec une granularité fine et donc fragmenter intelligement le DataModule principal et charger les DataModule résultants selon les besoins.

    Mais il n'y a pas de règle absolue, le dogmatisme n'est pas une bonne pratique. En outre, si tu reprends un projet existant avec un DataModule unique, il faudra certainement composer avec, le refactoring (réorganisation de la structure du projet) n'est pas toujours possible.

    Voilà j'ai abordé les aspects du problème qui me sont venus à l'esprit, il serait très intéressant d'avoir d'autres avis sur le sujet.

    Cordialement

    e-ric

  5. #5
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Sur les gros projets, je crée un DataModule qui représente la base de données puis un DataModule par table. Ils sont créés / détruits dynamiquement au fur et à mesure des besoins.

    Bloon

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 564
    Points : 3 968
    Points
    3 968
    Par défaut
    Sur les gros projets, je crée un DataModule qui représente la base de données puis un DataModule par table. Ils sont créés / détruits dynamiquement au fur et à mesure des besoins
    Effectivement, c'est encore plus poussé que ce que je propose mais cela ne génère-t'il trop de fichiers source ? J'aurais plutôt tendance à regrouper les tables dans des modules de données selon leur affinité fonctionnelle.

    Comment fais-tu pour les tables reliées ensemble (relation maître / détail, lookup) ? Tu dois être amené à faire pas mal de code pour gérer tout cela, as-tu prévu des automatismes ?

    Cordialement

    e-ric

  7. #7
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Citation Envoyé par e-ric
    Effectivement, c'est encore plus poussé que ce que je propose mais cela ne génère-t'il trop de fichiers source ? J'aurais plutôt tendance à regrouper les tables dans des modules de données selon leur affinité fonctionnelle.
    Ca fait beaucoup de fichiers effectivement, mais ça n'est pas du tout gênant.

    Comment fais-tu pour les tables reliées ensemble (relation maître / détail, lookup) ? Tu dois être amené à faire pas mal de code pour gérer tout cela, as-tu prévu des automatismes ?
    D'où l'intérêt de la POO, tu programmes une fois le comportement maitre/détail ou lookup et ensuite tu n'as plus qu'à l'utiliser partout où tu en as besoin. Ca permet d'écrire des choses du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Liste des commandes d'un client
    // client et commande sont des objets "metier"
    client.ajouteLiaison(TLiaison.Create(TCommande,'CLIENT'));
    ...
    commande := client.getLiaison(TCommande).getObjet;
    ...
    dataSourceCommande.DataSet := commande.datamodule.getDataSet;
    C'est difficile d'entrer dans le détail dans un post de forum :-)
    Bloon

  8. #8
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Bonjour, je contribue modestement en faisant part de mon experience :

    Comme Malatar, j'ai prefere creer un DM generique qui comporte le TSQLConnection et les grosses tables communes.
    Puis, je cree dynamiquement un DM propre a chacune de mes form pour les acces complementaires. Je n'ai eu aucun souci avec les relations maitres-details.

    PS : bloon, je ne comprends pas ce que tu veux dire avec
    je crée un DataModule qui représente la base de données
    . Tu as deja tout a ce moment la ?

  9. #9
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    PS : bloon, je ne comprends pas ce que tu veux dire avec
    je crée un DataModule qui représente la base de données
    . Tu as deja tout a ce moment la ?
    Je veux dire qu'il représente la connexion à la base de données et qu'il sera utilisé par les autres datamodules pour effectuer des requêtes sur la base.

    Bloon

Discussions similaires

  1. Sécurité - Droits sur un seul ou plusieurs index
    Par sifac dans le forum Administration
    Réponses: 1
    Dernier message: 15/01/2008, 11h56
  2. [1.x] Un seul template, plusieurs actions
    Par zakaria_ dans le forum Symfony
    Réponses: 1
    Dernier message: 14/08/2007, 19h21
  3. un seul formulaire, plusieurs destinataires / fenetres
    Par jlf dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/05/2006, 23h30
  4. RS232: Un seul ou plusieurs threads?
    Par cfalcot dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 02/04/2006, 00h01
  5. Réponses: 2
    Dernier message: 10/07/2004, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo