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 :

Programmation vb.NET multicouche IHM, BPL, DAL, BEL ? [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Bonjour à tous,

    Je me pose des questions concernant la programmation en VB.net, en multicouche. J'ai du mal depuis quelques jours avec ça, donc j'implore votre aide .

    Je dois travailler avec une couche IHM (Interface Homme Machine), une autre BPL (Business Process Layer = Couche métier), la DAL (Data Access Layer) et une dernière la BEL (Business Entity Layer).

    Concretement, je n'arrive pas en partant d'un exemple simple, à programmer selon ce modèle d'architecture. Je comprends le plus gros de la théorie (a quoi ça sert, les avantages), mais dans la pratique, c'est une autre histoire.
    De plus, la couche BEL reste encore à mes yeux énigmatique : Comment l'utiliser ? Quand l'utiliser ? Pourquoi l'utiliser ?

    Je vous propose de m'aider en m'expliquant comment vous programmeriez selon l'architecture cité ci-dessus un exemple tout bête du type :

    J'ai une table T_USER, avec les champs ID, Nom, Prenom, Age, et Ville.
    Je veux à partir de mon IHM (une winform toute bête avec les champs ID, Nom, ...) ajouter un utilisateur à ma BDD.

    Comment m'y prendre pour programmer avec ces couches IHM, BPL, DAL, et BEL ?

    Si je m'exprime mal, ou qu'il vous manque des détails pour me répondre, n'hésitez pas à me le faire savoir .

  2. #2
    Membre émérite Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Par défaut
    Salut

    Tu t'exprimes très bien, il n'y a pas de soucis, par contre ton post ressemble beaucoup à "Faites mes devoirs à ma place"...
    Peut etre devrais-tu montrer un peu ce que tu as fait, ce sur quoi tu bloques, montrer que tu n'attends pas que l'on te fasse tout.

    De plus, la couche BEL reste encore à mes yeux énigmatique : Comment l'utiliser ? Quand l'utiliser ? Pourquoi l'utiliser ?
    La couche BEL est la couche qui contient les objets métiers.
    Par exemple dans ton cas , elle va contenir la classe "User"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    public class User {
           public string Id {get;set;}
           public string Nom{get;set;}
           public string Prenom{get;set;}
           public string Age{get;set;}
    }
    Cette couche est transverse aux 3 autres puisque ton objet métier va se "trimballer" de la couche IHM ou les infos vont être récupérées vers la couche DAL où elles vont être insérées en BDD.


    En gros pour ton exemple ca donnerait IHM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ....
    User newUser = new User();
    newUser.Id = ...
    newUser.Nom = ...
     
    UserBPL.AddUser(newUser);
    .....
    Couche BPL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class UserBPL{
     
    public void AddUser(User newUser)
    {
    //code permettant par exemple de verifier s'il n'existe pas.
    UserDAL.AddUser(newUser);
    }
     
    }
    Couche DAL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class UserDAL{
     
    public void AddUser(User newUser)
    {
    //connexion a la BDD et ajout de l'utilisateur
     
    }
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Citation Envoyé par bizet Voir le message
    Salut

    Tu t'exprimes très bien, il n'y a pas de soucis, par contre ton post ressemble beaucoup à "Faites mes devoirs à ma place"...
    Peut etre devrais-tu montrer un peu ce que tu as fait, ce sur quoi tu bloques, montrer que tu n'attends pas que l'on te fasse tout.
    Merci pour ta réponse qui m'aide beaucoup. En faite, je suis apprenti en informatique, il ne s'agit pas là de devoirs, mais uniquement du fait que je suis en entreprise un peu lancé tout seul dans le bain et que je dois comprendre par moi même. Du coup, même si j'ai à peu près réussi à assimiler seul la POO, la programmation en couche me pose problème dans la pratique. J'ai du mal à visualiser comment m'en servir, mais déjà là avec ce que tu m'as expliqué j'imagine mieux la chose.

    Je vais tenter de résumer ce que j'ai compris de tes explications, n'hésite pas à me reprendre :

    Dans la BEL, on trouve les classes qui nous permettrons d'instancier des objets métiers (mais finalement on y trouve pas les objets en soit ?)

    Dans l'IHM, on instancie un objet metier à partir de la classe située dans la BEL, et on prends pour attributs le Nom, Prenom, Age, etc. On vient ensuite appeler des fonctions de la couche inférieure (c'est donc ça finalement le passage d'une couche à l'autre - le fait d'appeler une fonction de la couche inferieure et de lui passer en parametre l'objet métier ?).

    Dans la BPL, on a les règles de gestion, tout le code métier. Si tout va bien, qu'on a effectué tout ce qu'on avait à faire, on appelle une fonction se trouvant dans la DAL.

    Dans la DAL, j'effectue des requetes parametrées afin d'effectuer les Select, insert et compagnie. Les parametres étant au final les attributs de mon objet métier.

    Ok, mais donc au final, peut-être est-ce à cause de l'exemple simpliste, mais j'ai le sentiment que cette couche BEL sert pas à grand chose ?


    Bon, mettons que pour l'INSERT c'est ok, dans le sens inverse pour un select, ça se passe comment ? On instancie un objet metier dans la DAL et on remonte ? C'est pas interdit ?

    Merci d'avance, je vais tenter de programmer l'INSERT.

  4. #4
    Membre émérite Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Par défaut
    Citation Envoyé par shurikeNzL Voir le message
    Je vais tenter de résumer ce que j'ai compris de tes explications,....
    Oui c'est bien ça.

    Citation Envoyé par shurikeNzL Voir le message
    Ok, mais donc au final, peut-être est-ce à cause de l'exemple simpliste, mais j'ai le sentiment que cette couche BEL sert pas à grand chose ?
    Bien sur que si elle sert. C'est dans cette couche que tu définis tes objets métiers de ton application.
    Admettons que tu enleves cette couche, ou est ce que tu définis tes objets métiers comme les Users?

    En cherchant des données sur le net, j'ai trouvé un exemple ou effectivement ils n'utilisent pas les concepts de couche BEL puisqu'ils utilisent seulement des DataSets.

    Citation Envoyé par shurikeNzL Voir le message
    Bon, mettons que pour l'INSERT c'est ok, dans le sens inverse pour un select, ça se passe comment ? On instancie un objet metier dans la DAL et on remonte ? C'est pas interdit ?

    Merci d'avance, je vais tenter de programmer l'INSERT.
    Non ce n'est pas interdit.
    Comme expliqué précedemment les objets de ta couche BEL sont transverses à tes trois couches.
    Ce que tu n'as pas le droit de faire c'est depuis ta couche DAL appelé une fonction de ta couche BPL.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Citation Envoyé par bizet Voir le message
    Oui c'est bien ça.


    Bien sur que si elle sert. C'est dans cette couche que tu définis tes objets métiers de ton application.
    Admettons que tu enleves cette couche, ou est ce que tu définis tes objets métiers comme les Users?

    En cherchant des données sur le net, j'ai trouvé un exemple ou effectivement ils n'utilisent pas les concepts de couche BEL puisqu'ils utilisent seulement des DataSets.



    Non ce n'est pas interdit.
    Comme expliqué précedemment les objets de ta couche BEL sont transverses à tes trois couches.
    Ce que tu n'as pas le droit de faire c'est depuis ta couche DAL appelé une fonction de ta couche BPL.

    Ecoute, je te remercie, tu m'enlèves une épine du pied. Je poste un peu plus tard du code, si tu as le temps à l'occasion, n'hésite pas à me dire ce que t'en penses. Je met résolu. J'espère que ça pourra servir à d'autre.

    EDIT : Si, une chose quand même. Puisque tu n'as pas le droit d'invoquer une fonction d'une couche supérieure, comment remonter l'objet métier jusqu'en haut ?

  6. #6
    Membre émérite Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Par défaut
    Avec une fonction qui retourne un objet!!!

    IHM : afficher toutes les infos d'un utilisateur dont on connait son nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string nom =...
     
    User monUser = UserBPL.getByName(nom);
    BPL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public User getByName(string pNom)
    {
    User monUser = UserDAL.getByName(pNom);
    return monUser;
    }
    DAL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public User getByName(string pNom)
    {
    string requete = "select * ...";
    executeReader...
     
    User monUser = new User();
    User.prenom = resultat[0];
    .....
     
    return monUser;
    }
    C'est toujours la couche IHM qui appelle une fonction BPL lui retournant un resultat.
    BPL appelle des fonctions de la couche DAL.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Citation Envoyé par shurikeNzL Voir le message
    J'ai une table T_USER, avec les champs ID, Nom, Prenom, Age, et Ville.
    Je veux à partir de mon IHM (une winform toute bête avec les champs ID, Nom, ...) ajouter un utilisateur à ma BDD.

    Comment m'y prendre pour programmer avec ces couches IHM, BPL, DAL, et BEL ?
    OK, ça c'est fait.
    Mais maintenant, mettons qu'on utilise une interface WinForm quelque peu différente :
    Un datagridview pour afficher les colonnes de notre table excepté ID.

    Si je veux supprimer un enregistrement dans la table de la BDD en se basant sur l'ID à partir d'un bouton supprimer, comment faire ?

    En clair, je suis l'utilisateur du programme, j'ai ma fenetre avec un joli datagridview qui m'affiche les enregistrements de la table. Je selectionne une ligne, et clique sur supprimer.

    Comment mon programme fait-il la liaison entre la ligne que j'ai selectionné et la ligne qu'il doit supprimer dans la BDD ?

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    Je ne m'y connais pas trop en couche, donc je ne sais pas ou placer le code dans ton cas. Mais personnelement je met une colonne "Identifiant" dans mes datagridview mais non visible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DGV.Columns("Ma Colonne").Visible = False
    Ainsi, tu as accé à l'identifiant sans l'afficher à l'utilisateur, à voir si il n'y a pas mieux :p

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Citation Envoyé par Maniz Voir le message
    Je ne m'y connais pas trop en couche, donc je ne sais pas ou placer le code dans ton cas. Mais personnelement je met une colonne "Identifiant" dans mes datagridview mais non visible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DGV.Columns("Ma Colonne").Visible = False
    Ainsi, tu as accé à l'identifiant sans l'afficher à l'utilisateur, à voir si il n'y a pas mieux :p
    Je pense que je vais être forcé de faire ça vu que je ne vois pas comment faire autrement ^^.

    Mais je me demande si au lieu d'amener ma datasource direct dans le datagridview s'il ne serait pas possible d'amener une liste d'objet User dans mon datagridview. Ca se fait ça ?

  10. #10
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Oui oui, tu peux faire cela.

    Perso, j'me suis mis à la programmation en couche y a pas longtemps non plus et j'ai ceci dans la ma couche DAL par exemple :

    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
        Public Function GetUsersByName(ByVal name As String) As List(Of User)
            users = New List(Of User)
            ConnectDB()
     
            sql = 'la requête qui va bien
            ds = Cnx.DoSelect(sql)
            If ds.Tables.Count > 0 Then
                For Each row As DataRow In ds.Tables(0).Rows
                    users.Add(New User("les arguments qui vont bien"))
                Next
            End If
            DisconnectDB()
     
            Return users
        End Function
    Je récupère donc bien une liste d'objets de type User et j'affecte cette liste à la propriété Datasource de mon Datagridview.


    Sinon, j'aimerais profiter de ce topic pour m'assurer d'avoir bien compris le bazar (c'est nouveau pour moi aussi).

    Dans la couche BEL, j'ai mis les différents objets métier dont l'application a besoin.
    Dans la couche DAL, j'ai les fonctions d'accès DB qui retourne les objets de la BEL.
    Dans la couche BLL, j'ai les fonctions qui seront utilisées par la couche graphique pour avoir accès aux objets métiers.

    Est-ce juste jusque là ?

    Du coup, je m'interroge sur un truc. Dans une de mes classes d'objets, je fais appel à une fonction de la couche DAL. Est-ce correct ? Si non, où cet appel est-il sensé se faire ? Je ne donne pas d'exemple concret volontairement car j'aimerais connaître la réponse "théorique" (ce qui devrait être fait idéalement).

    Merci d'avance,

    Griftou.

    EDIT : Je crois que je viens de comprendre. Je pense que ça doit aller dans la couche BLL mais j'attends tout même la confirmation de personnes avec plsu d'XP dans le domaine ^^

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Citation Envoyé par griftou Voir le message
    Dans une de mes classes d'objets, je fais appel à une fonction de la couche DAL. Est-ce correct ?
    J'ai pas plus d'experience que toi, mais il me semble que que déjà à la base, la BEL ne référence aucune couche et que donc il est normalement impossible d'appeler une fonction de l'IHM, BLL ou DAL.

    IHM référence la BPL et la BEL
    BPL référence la DAL et la BEL
    DAL référence la BEL uniquement.
    BEL ne référence aucune couche sinon on aurait un problème de référence circulaire.

    Que l'on me corrige si je dis faux.

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Par défaut
    Citation Envoyé par griftou Voir le message
    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
     
    Public Function GetUsersByName(ByVal name As String) As List(Of User)
            users = New List(Of User)
            ConnectDB()
     
            sql = 'la requête qui va bien
            ds = Cnx.DoSelect(sql)
            If ds.Tables.Count > 0 Then
                For Each row As DataRow In ds.Tables(0).Rows
                    users.Add(New User("les arguments qui vont bien"))
                Next
            End If
            DisconnectDB()
     
            Return users
        End Function
    Dis moi, la variable ds est de quel type ? et quel est le rôle de Cnx et son type ? Merci .

    Pas facile la prog en couche .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/06/2007, 16h33
  2. Debuter en programmation VB.net pour Win mobile
    Par oldman dans le forum VB.NET
    Réponses: 4
    Dernier message: 09/05/2007, 10h45
  3. inclure une BD oracle dans un programme VB.net
    Par noussaENSI dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/07/2006, 15h29
  4. Réponses: 4
    Dernier message: 28/04/2006, 23h21
  5. [VB.NET] Activation d'un programme VB.NET
    Par cyrcroix dans le forum Windows Forms
    Réponses: 7
    Dernier message: 03/06/2005, 12h21

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