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

VB.NET Discussion :

Organisation d'un programme (Class et Structures)


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 52
    Points : 26
    Points
    26
    Par défaut Organisation d'un programme (Class et Structures)
    Bonjour,

    Je suis en train de créer un programme de gestion de stock avec des articles, des devis, des factures, des commandes, des BL, des redus...

    Je vais devoir enregistrer et récupérer régulièrement des informations répétitives dans ma base de données. Par exemple je vais créer un devis, puis le transformer en bon de commande commande, puis en bon de préparation, puis en BL.... Je pense gérer toutes la partie "récupération et insertion d'information de la base de données avec des class (ici ma class s'appelera "Articles.vb" par exemple). Comme ça je pourrai l'appeler de n'importe où dans mon programme. Et je vais gérer l'affichage dans mes formulaires (car plusieurs formulaires peuvent avoir des affichages différents mais récupèrerons les mêmes informations de ma BDD par la class adaptée). Par exemple un article sera affiché dans un devis ou dans une liste d'articles, mais avec un affichage différent.

    Par exemple j'ai un formulaire qui affiche une sélection d'Articles. Je pense récupérer toutes les fiches articles (référence, libellé, qte, tarifs...) dans un Arraylist (il y aura autant d'article que de ligne dans mon Arraylist). Puis de traiter les informations comme je le souhaite en affichant la structure de l'article. Je souhaiterai les afficher sous cette forme :

    article(0).reference
    article(0).libelle
    article(0).prix
    ---
    article(1).reference
    article(1).libelle
    article(1).prix

    J'ai developpé ça comme ceci :

    Ma class Articles.vb

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    ' Je défini une structure avec toutes les informations de ma fiche articles
        Public Structure StructSousRef
            Dim Id As Integer
            Dim CodeInterne1 As Integer
            Dim Libelle As String
            Dim Qte As Integer
        End Structure
     
    ' Je déclare ensuite une fonction qui met tous les articles souhaités (avec la structure) dans un arraylist comme ceci :
     
    Public Function getSousReference(ByVal IdArticle As Integer) As ArrayList
            Dim TabSousRefs As New ArrayList
            Dim cnxSRF = New DBSQL
            cnxSRF.Requete = "SELECT Articles.Id,CodeInterne1,Libelle,Qte FROM...'"
            cnxSRF.ConnectionExecuteReader()
            'Dim TabSousRefs() As StructSousRef
            Dim i As Integer = 0
            Do While cnxSRF.Reader.Read
                Dim sousRef As New StructSousRef
                With sousRef
    'ici je bénéficie de ma structure
                    .Id = cnxSRF.Reader.GetInt32(0)
                    .CodeInterne1 = cnxSRF.Reader.GetInt32(1)
                    .Libelle = cnxSRF.Reader.GetString(2)
                    .Qte = cnxSRF.Reader.GetInt32(3)
                End With
     
                TabSousRefs.Add(sousRef)
            Loop
     
            Return TabSousRefs
        End Function
    Ensuite dans un formulaire quelconque je peux récupérer toutes les données de mes fiches articles avec la structure comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    ' je crais un objet myArticle grâce à ma class
    Dim myArticle As New Articles
    ' je lance ma fonction qui va chercher les informations des articles souhaités et crais un arraylist avec autant de ligne que d'articles avec pour chaque article les informations de la structure (libellé, référence, id,qte...)
            myArticle.getFiche(IdArticle)
            Dim TabSousRefs As ArrayList = myArticle.getSousReference(IdArticle)
     
            ' On affiche les sous références dans un datagridview
            Me.DGVsousref.Rows.Clear()
     
            For i = 0 To TabSousRefs.Count - 1
    ' on recupère l'article et ça structure
                Dim sousRef As StructSousRef = CType(TabSousRefs(i), StructSousRef)
    ' on affiche les informations voulu dans le datagrid view
                Me.DGVsousref.Rows.Add(sousRef.Id, sousRef.CodeInterne1, sousRef.Libelle, sousRef.Qte)
    ' on recupère bien un article avec toute ça structure ;-)
    ' on passe à l'article suivant
            Next
    Que pensez-vous de cette méthode ? Je souhaite par la suite passer mon Objet contenant tous les articles sélectionné dans un arraylist (TabSousRefs) dans une fiche article par exemple, ou dans un devis, ou dans une commande... Est-ce la bonne méthode à employer pour récupérer les information d'une base de données de manière structurée ?

    J'espère que je n'ai pas été trop confus dans mon explication. Je cherche à organiser au mieux mon projet pour avoir des bases solides car il deviendra assez complexe par la suite.

    Merci pour votre aide.
    ;-)

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Personnellement, c'est comme ça que je fais (à quelques détails près).

    Habituellement, je fais :
    - Une classe d'accès à la base de données (qui se contente de jouer des requêtes et ramener le résultat)
    - Une classe générique avec toutes les propriétés communes à un objet de la base de données (select, insert, update, delete)
    - Une série de classes spécialisées (article, commande, dépôt, stock, etc.) qui hérite de la classe générique
    - Les différentes classes peuvent se référencer mutuellement : ainsi, dans le select d'une commande, je vais charger une liste d'objet "lignecommande", qui vont charger chacun un "article" correspondant

    Ensuite, dans l'écran de prise de commande par exemple, je n'ai qu'à appeler l'objet "commande" pour gérer ma commande de A à Z.

    Sur un projet, j'avais même possé le truc plus loin : j'avais fait des contrôles utilisateurs spécialisés, de façon à appeler par exemple la recherche de produits multi-critères avec affichage des 10 premiers résultats depuis n'improte quelle Form, et pouvoir simplement récupérer "selectedarticle" par exemple : dans un gros projet, c'est très pratique, ça économise beaucoup de code !
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 52
    Points : 26
    Points
    26
    Par défaut
    Merci StringBuilder pour tes conseils.

    J'ai eu la même démarche que toi (ce qui me rassure car je débute en POO et je suis frillant de vos conseils ;-) ) sauf pour la class "communes à un objet de la base de données (select, insert, update, delete)". Je n'ai pas bien saisi ce qu'elle faisait. Pour ma part je met mes select,insert,update et delete dans mes class (article, stock, devis, facture...).

    D'ailleurs je suis justement en train de mettre en place le code pour sauvegarder ou modifier un devis avec ses articles. Pour la sauvegarde (insert) et l'affichage, il n'y a pas de problème. Par contre pour la mise à jour d'un devis (update) j'hesite entre 3 méthodes :

    1) tout effacer (entêtes du devis et lignes des articles) puis tout recréer. Ce qui va me poser un problème car le N° de mon devis correspond au champ "Id" de ma table "devis" qui est auto-incrémenté (pour être unique). L'id va donc changer, et le N° de devis aussi. Donc c'est pas bon ;-)

    2) mettre à jour ma base de données de l'entête du devis (je conserve mon N° de devis d'origine) et supprimer et recréer toutes les lignes d'articles de mon devis qui elles sont dans une deuxième table appelé devis_lignes.

    3) mettre à jour ma base de données de l'entête du devis et mettre à jour aussi mes lignes d'articles (dans devis_lignes) en aillant préalablement identifié les lignes à supprimer, à modifier ou à effacer. Cette méthode est plus longue et plus complexe et il y a plus de risque d'erreur

    Qu'en pensez-vous ? J'avais précédemment fait un autre projet ou j'utilisais la méthode N°2 mais il y a peut-être un meilleur moyen plus propre de procéder ?

    Merci pour vos conseils ;-)

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Bonjour,

    pour ma part je préfère aussi les insert/update/delete directement dans mes objets quand ils sont spécifiques, avec tout de même une classe d'accès à la database pour tout ce qui est général.

    Au niveau de ta mise à jour de devis, l'idéal pour moi est la 3ème méthode, c'est selon moi la plus logique.
    Après ça peut générer plus d'erreur oui et non, si tes objets sont bien créés c'est facile à mettre en place.
    Le Porc est un loup pour le Porc.

Discussions similaires

  1. [VB.NET] Privilégier une classe à une structure ou inversement ?
    Par Jean-Philippe André dans le forum Débuter
    Réponses: 2
    Dernier message: 27/02/2012, 08h47
  2. [AJAX] Organisation de la programmation
    Par francois_a dans le forum AJAX
    Réponses: 2
    Dernier message: 04/09/2009, 03h44
  3. Classe ou structure ?
    Par tintin72 dans le forum Débuter
    Réponses: 9
    Dernier message: 20/11/2008, 19h26
  4. Réponses: 6
    Dernier message: 26/06/2006, 10h29
  5. Réponses: 4
    Dernier message: 04/06/2006, 16h53

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