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

C# Discussion :

Interaction UI BAL


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut Interaction UI BAL
    Bonjour,

    Je continue ma démarche pour coder proprement. Après avoir abandonné les dataBinding, dataRelation, etc... (j'utilise des DTO et des Liste de DTO pour alimenter mes différents controles avec une couche IU, BAL, BEL et DAL.
    Je souhaiterais quelques précisions concernant l'approche entre la couche IU et BAL. Je m'explique, après avoir lu un poste de 2012 qui résume bien mon problème et alimente bien le débat (http://www.developpez.net/forums/d11...ntexte-actuel/) j'ai du mal à faire un choix en termes d'approche:

    J'ai codé dans ma couche IU, càd dans mon formulaire à la fois la partie UI et la partie BAL (), au chargement du formulaire j'alimente un treeview (catégories et sous catégories) avec un appel à la couche DAL pour récupérer la List<Categorie> listeCategorie (mapping objet<->bdd sql server). On retrouve dans ma couche UI un code comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    treeView1.Nodes.Add(tnPere);
    L'idée est donc de gérer le contrôle treeView1 depuis ma couche BAL ! et là les questions commencent :

    Je passe l'instance de mon formulaire à la méthode de ma couche BAL pour qu'il puisse gérer tous les contrôles (les contrôles accessibles à oui)
    IL NE FAUT PAS IL FAUT RESPECTER L'indépendance des objets. tu enfreins le principe de l'encapsulation, Bing bang ok

    Il faut implémenter dans la couche UI, des méthodes pour gérer les propriétés des objets, exemple trouvé dans le post cité précédemment

    Je cite : "De toutes façons, ce n'est pas du tout une bonne approche ; en rendant public les contrôles de la Form, tu enfreins le principe de l'encapsulation. Si les contrôles sont privés par défaut, ce n'est pas par hasard : seule la Form qui les définit devrait pouvoir y accéder. Si tu dois donner la possibilité à d'autres classes de modifier le texte d'une TextBox, crée une propriété pour ça"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public string TotoText
    {
        get { return textBox1.Text; }
        set { textBox1.Text = value; }
    }
    Donc ça c'est très bien mais moi je souhaite faire davantage que récupérer la valeur d'une TextBox ! comme pour mon
    exemple "treeView1.Nodes.Add(tnPere)" donc il faut imaginer une méthode qui retourne l'instance du treeView ?


    Votre avis ?


    Autre question, ne faut 'il au démarrage de l'application appeler une méthode de la couche BAL qui va instancier un objet de la classe du formulaire à afficher au démarrage et de ce fait "connaitre" l'objet formulaire et donc, pouvoir le manipuler (du moins ses objets controle) ?

    Votre avis ?

    J'attends avec impatiente votre opinion pour valider mon paradigme approche de développement (il faut pas s'enflammer)

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    bonjour

    La couche BAL n'a pas à connaitre ta couche UI et donc, ne doit surtout pas fournir des traitements dépendant du controle contenant
    les données.

    Ta BAL doit uniquement fournir les méthodes pour accéder aux données.. et gérer du business mais surement pas se soucier de la nature du contrôle...

    Gère ton treeview qui est controle utilisateur dans le code UI...

    Quels sont donc les traitements que tu voudrais mettre dans la BAL ?
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    Tout d’abord merci pour ta disponibilité.

    Actuellement j'affiche via un TreeView une arborescence de catégories et sous catégories

    Nom : Capture.PNG
Affichages : 68
Taille : 12,1 Ko

    je réalise toutes les opérations dans ma couche UI, dans le code du formulaire. J'appelle directement
    une méthode de la couche DAL qui me retourne une liste d'objet "Catégorie" pour alimenter le treeView. L'idée est d'appeler une
    méthode de la couche BAL qui elle même appelle la couche DAL. C'est ce que je fais dans couche BAL pour mes autres formulaires de mon application, BAl n'est qu'un intermédiaire (quasi contrôleur comme en MVC) entre les autres couches.

    Extrait de ma couche BAL :
    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
            public void ajoutCategorie(BEL_Categorie objBelayer)
            {
                DALayer objDALayer = new DALayer();
                objDALayer.ajoutCategorie(objBelayer);
     
            }
     
            public List<BEL_Personne> personneListe()
            {
                DALayer objDALayer = new DALayer();
                return objDALayer.personneListe();
     
            }
     
            public int ajoutProcedure(BEL_Procedure procedure,List<string> listeFichiers)
            {
                DALayer objDALayer = new DALayer();
                return objDALayer.procedureAjout(procedure, listeFichiers);
     
            }

    Extrait de ma couche UI :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     private void formProcedureListe_Load(object sender, EventArgs e)
            {
                Load_tree();
            }
            public void Load_tree()
            {
                DALayer objDal = new DALayer();
                List<BEL_Categorie> listeCategorie = new List<BEL_Categorie>();
                listeCategorie = objDal.categorieList();
                foreach (BEL_Categorie categorie in listeCategorie)
                {
                    if (categorie.idparent == 0)
                    {// catégorie de premier niveau sans catégorie parent
                        TreeNode tnPere = new TreeNode();
                        tnPere.Text = categorie.libelle;
                        int identifiantPere = categorie.id;
                        tnPere.Tag = categorie.id;
                        tnPere.Expand();
                        treeView1.Nodes.Add(tnPere);
                        FillChild(tnPere, identifiantPere);
                        treeView1.ExpandAll();
     
                    }
     
                }
     
            }
     
            public int FillChild(TreeNode parent, int identifiantPere)
            {
                DALayer objDal = new DALayer();
                List<BEL_Categorie> listeCategorieEnfant = new List<BEL_Categorie>();
                listeCategorieEnfant = objDal.categorieListEnfant(identifiantPere);
                if (listeCategorieEnfant.Count() > 0)
                {
                    foreach (BEL_Categorie categorie in listeCategorieEnfant)
                    {
                        TreeNode enfant = new TreeNode();
                        enfant.Text = categorie.libelle;
                        int temp = categorie.id;
                        enfant.Tag = categorie.id;
                        enfant.Collapse();
                        parent.Nodes.Add(enfant);
                        FillChild(enfant, temp);
                    }
     
                    return 0;
                }
                else
                {
                    return 0;
                }
     
            }
    Donc, selon toi mise à part l'ajout d'une méthode "intermédiaire" dans la couche BAL pour ne pas chercher directement
    la couche DAL, je continue à manipuler les controles dans la couche UI, il n'y a pas vraiment de règles de gestion dans ma couche BAL !

    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    bah si ce n'est que de la manipulation graphique...

    Après, si tu changes l'arborescence, il faudra bien l'enregistrer via une méthode de la BAL/DAL sauf si tu ne souhaites pas modifier les données !
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

Discussions similaires

  1. Liste interactive
    Par 10-nice dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/12/2004, 16h34
  2. [ant]: interaction avec le manager de tomcat
    Par sleepy2002 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 07/10/2004, 15h02
  3. [Collaboration/Interaction] Peut-on schématiser une interaction entre un bouton de commande et un autre objet ?
    Par manel007 dans le forum Autres Diagrammes
    Réponses: 5
    Dernier message: 21/09/2004, 01h01
  4. [CR] Interaction Etat/Sous Etat
    Par PAC76 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 03/06/2004, 16h21
  5. Réponses: 4
    Dernier message: 17/05/2004, 09h57

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