menu
  Home  ==>  articles  ==>  bdd  ==>  mastapp   

MastApp - John COLIBRI.

  • résumé : Présentation et analyse de l'application de facturation Mastapp, fournie avec Delphi
  • mots clé : Mastapp - base de données - facturation
  • logiciel utilisé : Windows XP personnel, Delphi 6.0
  • matériel utilisé : Pentium 2.800 Mhz, 512 Meg de mémoire, 250 Giga disque dur
  • champ d'application : Delphi 1 à 2006 et Turbo Delphi sur Windows
  • niveau : développeur Delphi
  • plan :


1 - Introduction

Cet article présente la structure de l'application MastApp.

Il y a plusieurs raisons pour nous intéresser à cette application:

  • c'est l'application phare de base de données de Delphi depuis Delphi 1. Borland a essayé de construire une application type, en y incorporant le plus possibles de techniques utilisables en d'autres circonstances pour les bases de données
  • Mastapp a été critiquée comme étant un "mauvais exemple" d'application Client Serveur. Nous allons présenter ici une analyse critique sur ce point
  • nous nous servirons de Mastapp comme point de départ pour construire une couche métier au dessus des Tables MastApp



2 - Les Tables Mastapp

2.1 - Les Versions de Mastapp

Tout d'abord mentionnons que Mastapp a existé en plusieurs versions à travers les ages. Mentionnons:
  • la toute première version utilisait le BDE, avec des tables Paradox. L'alias DBDEMOS contient d'ailleurs les tables CUSTOMER.DB, ORDER.DB etc
  • Delphi 6 contient une version utilisant les composant Interbase Express. Mentionnons aussi que cette version était utilisée comme base pour Quick Report. De plus cette version contient aussi une aide .HLP ainsi que le fichier .RTF permettant de générer cette aide
  • Delphi 2006 contient une version VCL .Net de Mastapp, ainsi qu'une application ASP .Net utilisant la base MastApp. Et les démonstrations du BDP utilisent aussi MastApp
Nous nous intéresserons uniquement à la version Interbase, avec Ibx

La base elle-même est fournie avec Delphi. Nous avons cependant eu quelques surprises:

  • nous utilisons couremment Interbase 6.0
  • les nouvelles versions de Delphi contiennent Interbase 7.nnn. Or la structure binaire des fichiers (ODS= On Disc Structure a changé entre la version 6 et la version 7). Il a donc fallu synchroniser la version des données et la version du moteur SQL installée. Pour mémoire, la base Interbase 6 fait 800 K, et la version Interbase 7.nnn dépasse 1 Mega
Les fichiers se trouvent normalement dans:
  • les données
        C:\Program Files\Fichiers communs\Borland Shared\Data
  • le code dans
        C:\Program Files\Borland\Delphi6\Demos\Db\IBMastApp


2.2 - Le Schéma

MastApp (MASTer APPlication correspont à un petit système de facturation. Des clients passent des commandes, et MastApp permet la création de factures.

Au niveau des Tables:

  • CUSTOMER contient des clients
  • ces clients passent des commandes : ORDERS
  • chaque commande
    • est effectué par un employé du magasin EMPLOYEE
    • contient des ITEMS (lignes de commandes)
  • chaque ITEM concerne un article PARTS
  • chaque article est fournie par des VENDORS
Deux tables annexes NEXTCUST et NEXTORD fournissent des clés uniques pour les deux tables CUSTOMER et ORDERS



Le Schéma UML, qui montre bien les dépendances et les relation d'inclusion, est donc le suivant:

image



Nous pouvons aussi fournir un schéma plus détaillé avec tous les champs, et où les liens ne montrent pas la multiplicité (1..n) mais les références d'une table à l'autre:

image



2.3 - Le script de création

Nous pouvons utiliser différents outils pour récupérer un script Interbase de création de Tables Mastapp
  • l'Explorateur de bases de données Delphi
  • IbConsole (qui fournit en plus les contraintes de clé étrangères°
  • des outils externes, tels que IbExpert
  • les composants Interbase Express, en en particulier IbExtract
Nous avons utilisé IbExtract, et le projet Delphi d'extraction est fourni en source avec l'article d'explication Extraction de Script . Cet outil vous permet, entre autre de regénérer la base, ou de changer de version de moteur SQL (version Interbase, autre moteur qu'Interbase)



3 - L'Application Delphi

Ayant présenté les données de la base, voyons à présent le projet Delphi qui gère cette base.

3.1 - La navigation

Le plus simple est de présenter tout d'abord les écrans:
  • un écran menu/barre d'outil donne accès aux autres fenêtres

    image

  • le bouton "New Order" affiche la fenêtre de saisie des commandes, qui est la fenêtre de traitement réelle

    image

    Il est possible de se déplacer d'une commande à une autre, ou d'ajouter une nouvelle commande. Le mode (affichage / saisie) est affiché en bleu, et les boutons de confirmation / annulation sont validés en fonction du mode

    de plus

    • à côté de "date", l'icône permet d'accéder à un calendrier

      image

    • dans la dbGrid de saisie des article, la colonne article contient une ellipse qui permet d'afficher une fenêtre de sélection d'articles:

      image

  • le bouton "Browse" affiche les clients et de leurs factures dans deux dbGrids:

    image

    et

    • en double cliquant sur un client (ou en cliquant "Edit'), une forme de saisie client est affichée

      image

    • en double cliquant sur une commande, la forme de saisie de commande est affichée

    • "define query" permet de définir de dates de recherche

      image

    • "active query" est un bouton qui reste enfoncé et qui lance la requête spécifiée par "define query" (démontre comment utiliser une requête paramétrée)
  • le bouton "Parts" permet d'afficher la liste des articles:

    image

    et en double cliquant sur un article, une fenêtre de saisie d'article est affichée:

    image

    Cette Forme contient un dbLookup pour sélectionner le vendeur

  • le bouton "Reports" permet de sélectionner des états

    image

    et en cliquant "View" un apperçu d'un état est présenté:

    image



3.2 - Le DataModule

Tous les composants d'accès sont regroupés dans un tDataModule, dont voici une image (légèrement réorganisée pour présenter les composants dans l'ordre CUSTOMER, ORDERS, ITEMS, PARTS, EMPLOYEE, VENDORS):

image




4 - L'analyse

Nous avons vu ici ou là des messages critiquant Mastapp, mais préciser quels quels reproches sont adressés à MastApp. C'est très facile: s'il n'y a aucune démon, on critique, et s'il y en a une, on lui tombe dessus à bras raccourcis. Nous avons d'ailleurs rencontré le même phénomène pour la démonstration "Pet Shop", qui est la démonstration de Sun / Java.

Nous allons présenter ici quelques remarques, en soulignant bien qu'il ne s'agit pas d'évaluer MastApp en tant qu'application de facturation idéale, mais en examinant les techniques de bases de données utilisées.



4.1 - Mentalité "Desktop" et non "CLient Serveur"

Mastapp a été créé avec des tables du BDE Paradox. L'explorateur de bases de données présente bien dans l'alias DEMOS les tables CUSTOMERS.DB etc

La version BDE utilisait des tTables, et quelques tQueries pour des calculs plus compliqués. Le portage en Interbase garde malheureusement des trace de cet héritage:

  • réutilisation de tIbTables, plutôt que de travailler avec des requêtes SQL (des IbQueries, des IbDataSets, ou IbClientDataSets)
  • réutilisation de tables spéciales pour gérer les clés (au lieu d'utiliser des générateurs Interbase
  • absence de DOMAIN, pas de contraintes (clé étrangère, min, max)
  • absence de TRIGGERS ou de STORED PROCEDUREs (encore que ceci peut être un choix pour améliorer le portage entre moteur SQL, ce qui a bien été le cas ici)


4.2 - Le Schéma

Pour une facturation, il serait intéressant:
  • de réorganiser les tables actuelles. En particulier de créer des tables pour gérer les adresses (client, employés, vendeurs), et éventuellement créer une table pour les personnes ("party" au sens de Martin FOWLER)
  • les données sont assez redondante. Le champ COUNTRY contient les chaînes littérales dans les tables VENDORS et CUSTOMERS. Idem pour STATE. Pour la petite histoire, nous nous sommes apperçus de ce codage en utilisant Data Extractor, un outil d'extraction de données)
  • bien sûr prolonger la facturation par un système de gestion de commande, de réception, de bonus pour les employés etc. Mais, une fois encore, le but de MastApp n'est pas de présenter une facturation complète
Nous pourrions aussi suggérer quelques modifications dans les noms:
  • pourquoi CUSTOMER ORDERSSS ITEMSSS et non CUSTOMER, ORDER, ITEM ou CUSTOMERSSS, ORDERSSS, ITEMSSS (note: pour ORDER je sais maintenant: ORDER fait partie des mots clés, car il est employé dans la clause ORDER BY !)
  • les clés sont bien normalisée "custno", "orderno" etc, mais les clés étrangères utilisent le même identificateur (dans ORDERS il y a une colonne "custo". Nous préférons utiliser "custno_ref" pour indiquer la référence, ce qui en plus évite les ambiguités dans les jointures.


4.3 - Le DataModule

A notre sens
  • il contient trop de composants, et en maintenance, il est un peu difficile de visualiser à quoi servent tous ces composants
  • certains composants ne sont utilisés par aucune Forme de l'application actuelle


4.4 - L'ergonomie

Quelques points:
  • pour "Browse"
    • plutôt que d'afficher deux dbGrid, et dans la seconde les commandes du seul client sélectionné dans la dbGrid du haut, il serait peut être préférable d'utiliser une liste de clients, dans des dBEdit les informations de ce client, et dans une dbGrid la liste des commandes

    • le code utilise massivement le partage d'un DataSource qui est rattaché à la dbGrid active. Nous économisons certes un DataSource, mais quel intérêt ?
  • la Forme de saisie de commandes n'est pas homogène:
    • si nous entrons par le menu "New Orders", c'est toujours la première commande de chaque client qui s'affiche (nous pourrions mettre le numéro de facture dans un dbLookup, mais nous risquons de modifier le numéro de commande du client actuel)
    • si nous entrons par "Browse | clic sur une commande" nous arrivons effectivement sur cette commande
    • la même forme est utilisée pour insérer et modifier une facture, mais le numéro de facture courant n'est pas affiché
  • la forme de recherche pour les articles est aussi celle utilisée pour rechercher les clients (mais ne semble pas être utilisé)



5 - Réutilisation de MastApp

Nous avions utilisé Mastapp dans les articles suivants:

Comme d'habitude:
  • nous vous remercions de nous signaler toute erreur, inexactitude ou problème de téléchargement en envoyant un e-mail à jcolibri@jcolibri.com. Les corrections qui en résulteront pourront aider les prochains lecteurs
  • tous vos commentaires, remarques, questions, critiques, suggestion d'article, ou mentions d'autres sources sur le même sujet seront de même les bienvenus à jcolibri@jcolibri.com.
  • plus simplement, vous pouvez taper (anonymement ou en fournissant votre e-mail pour une réponse) vos commentaires ci-dessus et nous les envoyer en cliquant "envoyer" :
    Nom :
    E-mail :
    Commentaires * :
     

  • et si vous avez apprécié cet article, faites connaître notre site, ajoutez un lien dans vos listes de liens ou citez-nous dans vos blogs ou réponses sur les messageries. C'est très simple: plus nous aurons de visiteurs et de références Google, plus nous écrirons d'articles.



6 - L'auteur

John COLIBRI est passionné par le développement Delphi et les applications de Bases de Données. Il a écrit de nombreux livres et articles, et partage son temps entre le développement de projets (nouveaux projets, maintenance, audit, migration BDE, migration Xe_n, refactoring) pour ses clients, le conseil (composants, architecture, test) et la formation. Son site contient des articles avec code source, ainsi que le programme et le calendrier des stages de formation Delphi, base de données, programmation objet, Services Web, Tcp/Ip et UML qu'il anime personellement tous les mois, à Paris, en province ou sur site client.
Created: jan-04. Last updated: mar-2020 - 250 articles, 620 .ZIP sources, 3303 figures
Contact : John COLIBRI - Tel: 01.42.83.69.36 / 06.87.88.23.91 - email:jcolibri@jcolibri.com
Copyright © J.Colibri   http://www.jcolibri.com - 2001 - 2020
Retour:  Home  Articles  Formations  Développement Delphi  Livres  Pascalissime  Liens  Download
l'Institut Pascal

John COLIBRI

+ Home
  + articles_avec_sources
    + bases_de_donnees
      + programmation_oracle
      + interbase
      + sql_server
      + firebird
      + mysql
      + xml
      – paradox_via_ado
      – mastapp
      – delphi_business_objects
      – clientdataset_xml
      – data_extractor
      – rave_report_tutorial
      – visual_livebindings
      – migration_bde
    + web_internet_sockets
    + services_web_
    + prog_objet_composants
    + office_com_automation
    + colibri_utilities
    + uml_design_patterns
    + graphique
    + delphi
    + outils
    + firemonkey
    + vcl_rtl
    + colibri_helpers
    + colibri_skelettons
    + admin
  + formations
  + developpement_delphi
  + présentations
  + pascalissime
  + livres
  + entre_nous
  – télécharger

contacts
plan_du_site
– chercher :

RSS feed  
Blog

Audit Delphi Bilan technique (technologie, méthodes, architecture, organisation, techologie et version, formation, gestion de projet) et recommandations - Tél 01.42.83.69.36