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

Schéma Discussion :

Modele MVC et logiciel de caisse


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 19
    Points
    19
    Par défaut Modele MVC et logiciel de caisse
    Bonjour à Tous,

    Je post car je j'ai un soucis de conception pour un logiciel de caisse d'un restaurant.

    Suivant le model MVC, j'ai déjà créé mon controleur, ma vue, et les Models.

    Outre les produits à la carte, je dois aussi gérer les Menus.

    La plupart des Menus ont un prix fixe, et des produits définis.
    exemple : Menu à 10euro comprenant : 1 entrée, 1 plat, 1 dessert.
    exemple2: Menu à 20euro comprenant : 2 entrées, 2 plats,2 desserts (au choix (donc à la carte))

    Ma question porte sur la conception des "Menus" :
    Si j'ajoute le menu, comment gérer les produits qui dépendent de ce menu ?

    Ma première idée était d'afficher les Menus, en cliquant sur un menu, cela afficherais les produits, mais l'ajout des produits n'ajouterais pas leurs prix.
    Cependant, cette idée est super moche.

    Ma deuxième idée, serais de faire une recherche dans la liste des produits commandés et d'y faire une condition sur la présence d'un menu ou pas. (n'importe quoi...)

    Ma 3ieme idée serais de créer une classe Menu et d'ajouter les produits à cette class, cependant je ne sais pas trop comment gérer l'ajout des produits suivant le menu.
    Cela m'oblige à créer des conditions sur le nombre de produit (entrée, plat, dessert, boisson), autorisé par le "Menu".

    Bref, je patauge un peu dans la gestion des Menus.

    J'avais une autre question, j'en profite aussi.
    Concernant la BDD qui enregistre les tickets, j'ai 2 possibilités :
    - Sois j'ajoute une entrée dans la Table "Tickets" par Ticket (Ceci oblige à entrer la liste des produits commandés dans une colonne au format "Text", et de parser la colonne pour récupérer les produits du ticket (vive le parsing...)

    - Sois, j'ajoute une entrée par produit contenant le numero du ticket. (si je fais 3000 tickets à 2 produits, ça me ferais 6000 entrées dans la table).

    Question de traitement, je préfère une entrée par produit, plus simple à mettre en oeuvre, mais cela pollue la BDD...

    Le développement n'étant pas mon métier, je fais appel à vos idées de conception.

    Merci d'avance,
    Amicalement,
    Fabien493

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Quel rapport avec Python ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Quel rapport avec Python ?
    Bonjour VinsS,

    Le programme est codé en Python, mais il est vrais que la question concerne plus l'architecture de l'application que le code lui même.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    VinsS a raison, je ne comprends pas pourquoi vous postez ce genre de questions dans le forum Python.
    Normalement, le modèle de donnée doit être défini avant de coder et il sera indépendant de la base de donnée et du langage de programmation. C'est la raison pour laquelle vous avez une rubrique modélisation dans le pavé ALM.
    Je pousse le tout là bas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par wiztricks
    Normalement, le modèle de donnée doit être défini avant de coder et il sera indépendant de la base de donnée et du langage de programmation.
    Je plussoie wiztricks !

    Revenons donc au début : les règles de gestion des données, d'où découlera un modèle conceptuel de données (MCD), lequel permettra de générer un modèle logique de données (MLD) qui donnera la structure des tables de la base de données.

    Nous avons donc des menus qui comprennent plusieurs produits et des des produits qui ne sont dans aucun menu.
    D'autre part, les produits sont d'un type défini (entrée, plat, dessert...).

    Règles de gestion :
    1) Un produit est d'un seul type et un type peut caractériser plusieurs produits.
    2) Un menu est composé de un à plusieurs produits et un produit peut entrer dans la composition d'un menu.

    MCD :
    menu -1,n----composer----0,n- produit -1,1----caracteriser----0,n- type

    Tables :
    J'utilise un principe de nommage inspiré de celui de SQLPro.
    Les clés primaires sont soulignées et les clés étrangères sont en italique.
    te_menu_mnu (mnu_id, mnu_nom, mnu_prix...)
    tr_type_typ (typ_id, typ_libelle...)
    te_produit_prd (prd_id, prd_id_type, prd_nom, prd_prix_carte...)
    tj_prd_composer_mnu_pcm (pcm_id_produit, pcm_id_menu...)

    Ensuite, vous pourrez, si nécessaire, faire un modèle organisationnel des données (MOD) qui correspondra à l'architecture de vos objets métiers dans votre programme et qui donnera lieu à la création de vues dans la base de données.
    Sous certaine conditions et selon le SGBD que vous utiliserez, vous pourrez directement travailler avec les vues, même en ajout, modification et suppression de données (bannir MySQL ou MariaDB pour ça).

    Par exemple, voici la vue qui vous donnera la composition de vos menus :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE VIEW v_composition_menu AS
    SELECT m.mnu_id, m.mnu_nom, m.mnu_prix,
    	p.prd_id, p.prd_nom,
    	t.typ_id, t.typ_libelle
    FROM te_menu_mnu m
    INNER JOIN tj_prd_composer_mnu_pcm pm ON pm.pcm_id_menu = m.mnu_id
    	INNER JOIN te_produit_prd p ON pm.pcm_id_produit = p.prd_id
    		INNER JOIN tr_type_typ t ON t.typ_id = p.prd_id_type
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    VinsS a raison, je ne comprends pas pourquoi vous postez ce genre de questions dans le forum Python.
    Normalement, le modèle de donnée doit être défini avant de coder et il sera indépendant de la base de donnée et du langage de programmation. C'est la raison pour laquelle vous avez une rubrique modélisation dans le pavé ALM.
    Je pousse le tout là bas.
    - W
    Merci wiztricks de me remettre dans le droit chemin. Je n'avais pas vue la section "Modélisation", Désolé .

    Etant débutant en POO, et donc en modélisation, j'ai eu un peu de mal à comprendre ta réponse CinePhil.
    Après lecture "des règles de gestion des données" et du "MCD". J'ai compris un peu plus ta réponse.

    Je vais mettre de coté ma question sur la BDD pour l'instant.

    Outre le MCD, ma question portait plus sur l'affichage des Menus et des Produits et de la gestion de produits dépendant des Menus.

    Quand on clique sur un produit ou un Menu ça l'ajoute à la liste des produits commandés. Mais comment différencier l'ajout d'un produit à la liste des produits commandés, et l'ajout d'un produit à un Menu ?
    Techniquement, il vas falloir créer 2 boutons pour le même produits ayant 2 actions différentes, le premier qui ajoute le produit à la liste, et le 2ieme qui ajoute le produit au Menu.
    Ce qui m'oblige à afficher 2 fois le même produit...

    Sauf si on créer une fonction qui vérifie dans la liste des produits si il existe un menu, et dans ce cas la, le produit est ajouter au Menu, et non à la liste mais si il existe plusieurs Menu, comment différencier l'ajout du produit au 1er ou au 2ieme Menu ?

    La seul solution que je vois, est d'afficher 2 boutons : "Menus", et "Carte"
    - le bouton "Menus" affiche la liste des Menu, puis affiche les produits suivant le menu, puis ajoute le produit sélectionné au Menu, puis le Menu à la liste des produits commandées.
    - Le bouton "Carte" affiche les produits "à la carte" qui eux sont ajoutés directement à la liste des produits commandées.

    Une autre solution serait d'afficher une fenêtre de configuration au clique d'un menu présent dans la liste des produits commandés, permettant de gérer et de sélectionner les produits du Menu. Mais encore une fois, cela m'oblige à créer 2 boutons pour 2 actions différentes, le premier dans la carte, et le deuxième dans la fenêtre de configuration.

    En fait, ma question c'est : "Comment vous verriez l'affichage et la gestion des produits et des Menus dans une application de type POS ?"

    J'ai regardé sur le ticket d'un fast-food très connue, apparemment les produits coûtent 0 euro si ils dépendent d'un Menu. Je serais curieux de savoir comment leur programme gère les produits faisant partie d'un menu ou non.

    Merci encore,
    Amicalement,
    Fabien493

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par fabien493 Voir le message
    Merci wiztricks de me remettre dans le droit chemin. Je n'avais pas vue la section "Modélisation", Désolé.
    Bah... Les voyages forment la jeunesse

    Outre le MCD, ma question portait plus sur l'affichage des Menus et des Produits et de la gestion de produits dépendant des Menus.

    Quand on clique sur un produit ou un Menu ça l'ajoute à la liste des produits commandés. Mais comment différencier l'ajout d'un produit à la liste des produits commandés, et l'ajout d'un produit à un Menu ?
    Techniquement, il vas falloir créer 2 boutons pour le même produits ayant 2 actions différentes, le premier qui ajoute le produit à la liste, et le 2ieme qui ajoute le produit au Menu.
    Ce qui m'oblige à afficher 2 fois le même produit...
    Les dialogues utilisateurs et ce qu'on présente (ou pas) sont des détails.
    Quand je dis cela, j'entends qu'ils doivent pouvoir être jetés à la poubelle si, in fine, le rendu ne plaît pas ou qu'on a envie de relooker tout çà pour un client particulier. Ce qui est important à ce stade est d'arriver à mettre le doigt sur ce qui ne bougera pas quelque soit les "options" de présentation. Une autre façon de voir est "qu'est ce que vous n'aurez pas à ré-écrire quelque soit la présentation?".
    Note: Si vous êtes parti sur un pattern MVC, çà correspond au "modèle" (enfin à une partie).

    Sauf si on créer une fonction qui vérifie dans la liste des produits si il existe un menu, et dans ce cas la, le produit est ajouter au Menu, et non à la liste mais si il existe plusieurs Menu, comment différencier l'ajout du produit au 1er ou au 2ieme Menu ?
    De toutes façon, entrée, plat, dessert sont déjà des catégories dans lesquelles il va falloir "classer" tous les "plats" / "produits".
    Un objet important sera la commande du client. Elle sera composée de... mais in fine, il faudra bien que côté cuisine on prépare les plats qui vont avec et qu'on puisse dire au serveur: apporter ce plat à la table X.
    Intuitivement, vous voyez que les plats qu'il faudra préparer en cuisine et la facture qu'on fera à la fin sont 2 choses bien différentes.

    La POO est un vrai zoo: vous aviez des menus et un catalogue de produits maintenant vous avez en plus des commandes et des factures.

    Je palabre, je palabre... mais c'est juste pour vous dire que votre code représente des activités métiers. Ce sont ces activités métiers que va capturer votre code. Et avant de pouvoir coder quoi que ce soit et penser "widget", il y a beaucoup de boulot papier crayon à faire pour "modéliser" les activités que vous allez représenter.

    Bon courage en tout cas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 19
    Points
    19
    Par défaut
    Merci wiztricks,

    Tu as expliqué une grosse partie de la façon de faire un programme orienté objet, avec quelques détails en plus sur la gestion d'un logiciel de type "POS".

    J'ai eu une grosse discussion avec "tarball69" sur la POO via Python, et depuis, j'ai déjà écrit une bonne partie du programme. Mais efféctivement, je devrais peut-être revoir la modélisation.

    Outre le traitement des données, et les données eux même, la partie qui elle sera affichée à l'utilisateur doit-être la plus simple, logique, et clair possible, surtout pour les utilisateurs lambda. Ce n'est pas simplement afficher un widget n'importe ou. Il existe de vrais études (j'ai oublié le nom), sur la meilleur façons d'organiser l'affichage d'une application.

    C'est pour ça que la barre de menu de votre explorateur ne se trouve pas en bas...

    Ma question portait simplement sur la "meilleur" façon d'afficher les menus et les produits qui en dépendent, dans un logiciels de type POS.

    Au final, pour faire quelque chose de plus clair possible, je pense afficher les catégories ainsi que les menus, et afficher les produits autorisés et classés en catégories dans les Menus :

    Exemple d'affichage :

    Catégories des produits :
    Entrées, plats, desserts,etc... > produits > ajout du produit à la liste des produits commandés.
    Menus > catégories > produits autorisés suivant le Menu sélectionné > ajout du produit au Menu.

    Dans cette exemple, on se retrouve avec 2 widgets button pour le même produit mais qui n'a pas la même action.
    Coté BDD, cela oblige de définir une colonne supplémentaire dans la table "Produits", contenant les menus dont peuvent dépendre le produit.
    il suffit ensuite d'afficher les catégories des produits qui peuvent dépendre du Menu....(mince, je réponds à moi même.....)

    Cependant, a l'heure actuelle, j'ajoute les produits commandés à une liste appartenant à l'objet "Ticket", contenant : la quantité, le nom du produit, et le prix, ce qui n'est pas la meilleur façon de faire...

    Je devrais peut-être créer un objet supplémentaire contenant un attribut pour les produits , et un autre attribut pour les Menus commandés, mais je n'ai pas encore réfléchi à la façon d'ajouter les menus commandés dans le Ticket (et donc dans la BDD)

    Vas falloir revoir la modélisation...

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/08/2011, 16h20
  2. A propos du modele mvc !
    Par clio671 dans le forum Interfaces Graphiques en Java
    Réponses: 15
    Dernier message: 16/11/2007, 11h12
  3. Réponses: 7
    Dernier message: 24/08/2007, 15h21
  4. [Design Pattern]Respecter le modèle MVC
    Par etiennegaloup dans le forum Général Java
    Réponses: 2
    Dernier message: 16/10/2005, 12h00
  5. [Design Pattern] Modele MVC
    Par unNew dans le forum Général Java
    Réponses: 27
    Dernier message: 01/09/2005, 00h37

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