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

Langages de programmation Discussion :

choix de conception pour un objet


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut choix de conception pour un objet
    Bonjour,
    je vais faire un objet "Client". Cet objet aura une méthode .Add afin de permettre l'ajout d'un client dans un base de données.
    Cet objet aura d'autres méthodes et un ensemble de propriétés qui correspondent + ou - aux différentes colonnes de ma table CLIENT.
    Question: comment passer les informations à mon objet Client pour appliquer la méthode .Add ?

    Methode 1 : utiliser les propriétés de l'objet Client dnas la méthode Add
    Client = new Client();
    Client.numero = 123;
    Client.nom = "eee";
    Client.adresse = "aaa";
    Client.Add();


    Methode 2 : Passer toutes les info en paramétres de la méthode .Add
    Client = new Client();
    Client.Add (numero, nom, adresse);
    // ou numero, nom, adresse sont des variables


    Methode 3:Créer une structure qui sera passée en paramétre à la méthode .Add
    StructAddClient structAddClient = new StructAddClient
    structAddClient.numero = 123;
    structAddClient.nom = "eee";
    structAddClient.adresse= "aaaa";
    Client = new Client();
    Client.Add (structAddClient);

    Pour ma part, j'ai une préférence pour la 3eme méthode car elle permet à l'utilisateur de l'objet de connaître précisément les champs à initialiser.

    Qu'elle est la mieux, y en a t il d'autres ?

  2. #2
    Membre très actif Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Par défaut
    je ne sais pas dans quel language tu programme (peut etre que tu l'as précisé mais j'ai pas du le lire), mais pourquoi ne pas faire un constructeur de ta classe client avec tes trois champs n°, adresse et nom. Ensuite ta méthode Add ajouterait ton objet client, bêtement, dont les membres sont ceux spécifiés ?

    Si tu fais de la POO, c'est ce qui me paraitrait le plus intuitif, mais je suis pas non plus LA référence en programmation...

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 250
    Par défaut
    Citation Envoyé par babedt Voir le message
    Bonjour,
    je vais faire un objet "Client". Cet objet aura une méthode .Add afin de permettre l'ajout d'un client dans un base de données.
    Cet objet aura d'autres méthodes et un ensemble de propriétés qui correspondent + ou - aux différentes colonnes de ma table CLIENT.
    Question: comment passer les informations à mon objet Client pour appliquer la méthode .Add ?

    Methode 1 : utiliser les propriétés de l'objet Client dnas la méthode Add
    Client = new Client();
    Client.numero = 123;
    Client.nom = "eee";
    Client.adresse = "aaa";
    Client.Add();


    Methode 2 : Passer toutes les info en paramétres de la méthode .Add
    Client = new Client();
    Client.Add (numero, nom, adresse);
    // ou numero, nom, adresse sont des variables


    Methode 3:Créer une structure qui sera passée en paramétre à la méthode .Add
    StructAddClient structAddClient = new StructAddClient
    structAddClient.numero = 123;
    structAddClient.nom = "eee";
    structAddClient.adresse= "aaaa";
    Client = new Client();
    Client.Add (structAddClient);

    Pour ma part, j'ai une préférence pour la 3eme méthode car elle permet à l'utilisateur de l'objet de connaître précisément les champs à initialiser.

    Qu'elle est la mieux, y en a t il d'autres ?
    Methode 4:
    martin = new Client(numero, nom, adresse);
    dbTruc.addClient(martin)

    Tu crees un client independamment de n'importe quelle base de donnees. Tu ajoutes un client grace a une classe qui gere l'insertion, la suppression des donnees dans ta BDD. C'est plus simple si tu veux changer de BDD. Tu peux meme avoir une classe par BDD.

    La methode 1 n'est pas OO. Et la methode 3 est trop compliquee. Un constructeur avec 3 variables, c'est facile a initialiser.

  4. #4
    Membre très actif Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Par défaut

    au moins on est d'accord

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    même si ma table possède plus de 30 colonnes (donc 30 param pour mon constructeur). J'en ai mis que trois dans les exemples pour ne pas avoir un trop gros poste...

    Je développe en C# (je ne l'avais pas précisé)

  6. #6
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    je pense... oui. Meme si ta table possède plus de 30 colonnes. Dans tous les cas, si ce sont les temps de réponse auxquels tu pense, la "méthode 4" est optimale...
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    *Peut-être* devrais tu déjà réfléchir à l'éventualité de "subdiviser" cette table composé d'énormément de champs en plusieurs tables en contenant chacune beaucoup moins.

    En effet, même si je ne remet absolument pas en question le fait qu'un "client" puisse véhiculer une trentaine d'informations différentes, il faudrait déjà voir le nombre d'informations qui ne sont pas utilisées d'office (soit parce que l'utilisation d'une information donnée "empêche" celle d'une autre, soit parce qu'une information particulière est facultative dans certaines conditions)...

    Entendons nous bien: ne sachant absolument pas quels objectifs sont poursuivis par la base de données, je ne me permettrai pas de juger de la nécessité de disposer de ces trente champs.

    Par contre, je me pose des questions sur l'utilité de voir apparaitre ces trente champs dans une seule et même table...

    Il faut savoir que, si ta table est composée de trente champs et que seule une dizaine sont effectivement utilisés en permanence, alors que les autres sont d'utilisation facultative, cela fini quand même par représenter une dépense d'espace inutile impressionnante.

    Le tout sans compter que les requêtes de sélection et de mise à jour sont rendues bien plus difficile sur ce genre de table.

    Evidemment, si tu n'es pas libre de la manière d'envisager les tables de la base de données, je comprendrai si tu me dis que tu ne peux pas la changer

    D'un autre coté, on dit souvent qu'en OO, si un objet a plus d'une responsabilité, c'est sans doute qu'il en a trop...

    Je t'inviterais donc aussi à réfléchir aux responsabilités qui reviennent clairement à ton "client" et à celles qui devraient échoir à d'autres objets

    De manière générale, il me semble de bon ton de se dire que, quitte à fournir une référence sur le "client" en cours de gestion, il me semblerait cohérent de distribuer différemment les responsabilités (tant du point de vue de la BDD que du point de vue des différentes classes que tu envisage de créer )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Par défaut
    Merci pour toutes ces réponses (qui vont dans le même sens) :

    Pour la petite histoire : j'ai évoqué une table CLIENT pour l'exemple - plus simple pour en discuter.
    En fait, je travaille dans le milieu industriel et je dois gérer beaucoup d'informations. La table en question a déjà été "explosée" en trois tables (avec des relations 1,1 de chaque côté) - ce sont + ou - des données de fabrication de produits.

    Merci encore

Discussions similaires

  1. problème de concept pour les objets
    Par denissolar dans le forum Général Python
    Réponses: 3
    Dernier message: 03/11/2012, 11h58
  2. Réponses: 0
    Dernier message: 13/02/2012, 17h30
  3. conception pour stocker un objet
    Par slix_alex dans le forum ALM
    Réponses: 1
    Dernier message: 01/04/2011, 13h18
  4. [Joomla!] [Choix] Quel CMS pour la conception d'un site de recettes ?
    Par katie dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 11
    Dernier message: 24/10/2007, 22h09
  5. Choix de couleur pour un objet
    Par creale10 dans le forum Flash
    Réponses: 3
    Dernier message: 27/02/2007, 10h22

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