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 :

Architecture N-Tiers & WinForm


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut Architecture N-Tiers & WinForm
    Bonjour,

    je souhaite créer une application C# WinForms pour mon club de plongée.

    Je dispose d'une BDD avec l'ensemble des membres du club.
    J'aimerais découper mon application selon l'architecture N-Tiers.

    J'ai fait une ébauche de celle-ci.

    Data Layer : Base de données SQL.
    Data Access Layer : 1 projet dll DataAccess.
    Business Layer : 1 projet Entity, 1 projet Service.
    GUI : 1 projet application WinForms UserGUI.

    Voilà maintenant le code contenu dans chaque projet.
    Business Layer > Entity

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Personne
    {
    	public int id;
    	public string code;
    	public string nom;
    	public string prenom;
     
    }
     
    public class Membre : Personne
    {
     
    }
    Business Layer > Service
    Mon projet Service, classe GetService, contient deux méthodes, 1 GetAllMembres & 1 GetMembreByCode(string codeMembre).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public List<Membre> GetAllMembres()
    {}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public Membre GetMembreByCode(string codeMembre)
    {}
    Data Access Layer
    Mon projet DataAccess contient deux classes : 1 permettant la connexion à la BDD & 1 contenant la méthode GetMembreData.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public DataTable GetMembreData(string codeMembre)
    {}
    Mon objectif serait que lorsque j'appelle une méthode de Service (soit GetAllMembres soit GetMembreByCode), cette dernière appelle ma méthode GetMembreData du Data Access Layer.
    Si la méthode GetAllMembres est appelé alors GetMembreData prend null en paramètre et retourne l'ensemble des membres.
    Si la méthode GetMembreByCode est appelé alors GetMembre Data prend le code en paramètre et retourne le membre associé.
    Puis retourne les objets afin d'être afficher dans une DataGridView.

    L'affichage dans la GridView n'est pas le problème pour l'instant. Je cherche a savoir comment faire intéragir Service et DataAccess.

    Merci d'avance !

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    Salut,
    peux-tu préciser ta phrase "Je cherche a savoir comment faire intéragir Service et DataAccess." ?
    ta méthode "GetMembreData" renvoie un DataTable, tu n'as plus qu'à "convertir" tes row en 'Membre' ou 'List<Membre>' selon la fonction d'appel.

    Que te manque t'il ?
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Justement j'aimerais savoir ce que je dois mettre dans mes différentes méthodes...

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    mais lol, on ne va pas faire ton prog à ta place ^^

    en gros :
    -ta méthode "GetAllMembres()" va appeler "GetMembreData(Null)" qui va te renvoyer, grâce à la récupération depuis la BDD du genre 'select * from membres', un datatable.
    Pour chaque ligne, "GetAllMembres()" va instancier un membre et l'ajouter dans la List<Membre>; A la fin elle renvoit cette liste.

    -ta méthode "GetMembreByCode("MachinBidule")" va appeler "GetMembreData("MachineBidule")" qui va te renvoyer, grâce à la récupération depuis la BDD du genre 'select * from membres where nom='MachinBidule'', un datatable.
    Si il ce datatable contient bien (au moins...) une ligne "GetMembreByCode("MachinBidule")" va instancier UN membre et le renvoyer.
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    -ta méthode "GetAllMembres()" va appeler "GetMembreData(Null)" qui va te renvoyer, grâce à la récupération depuis la BDD du genre 'select * from membres', un datatable.
    Ma requête doit se trouver où ? Dans ma méthode GetMemberData ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    oui, vu que c'est ta couche d'accès aux données.
    les autres classes ne verront jamais la BDD, mais seulement ce que renvoi cette couche.

    tu devrais passer un peu de temps sur un tutoriel 3-tiers pour mieux cerner le principe parce que j'ai l'impression que tu t'es un peu lancé en aveugle ^^

    en gros, ta couche d'accès aux données va se charger d'interroger la BDD et récupérer, modifier, insérer... les données.
    ta couche métier va transformer les données brutes renvoyées par la couche d'accès en données métier (Membres par exemple) et manipuler ces dernières.
    la couche UI va simplement les rendre accessible à l'utilisateur via une interface.
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Voila le contenu de ma méthode GetMembreData

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private string querySQL
    public DataTable GetMembreData(string codeMembre)
    {
    	this.querySQL = "select * from maTable where code = '" + codeMembre + "';";
    	return this.querySQL;
    }

    Me voilà avec une erreur.

    Il faut que je retourne ma DataTable, c'est bien le cas ?

    Comment faire ?

  8. #8
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    bonjour

    DAL : data accès layer ,c'est la couche où on voit que l’exécution des requêtes c'est là on voit utilisation de ADO.NET si tu travail avec ADO.NET donc pas de métier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     private string querySQL
    public DataTable GetMembreData(string codeMembre)
    {
    	this.querySQL = "select * from maTable where code = '" + codeMembre + "';";
    	return excuterequêuteAndReturneDatatable(querySQL);//a voir ce que tu mettre dedans 
    }
    BLL: business Logic Layer : c'est la couche métier c'est la noyau de l'application (les réglés de gestion de l'application )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public int CalculeTotal(list<int> montants)
    {
         int total=0;
    	foreach(int i in montants)
             total+=i;
    return total;
    }
    Service : si c'est bien un web service il ne sert qu'à faire l’interfaçage entre BLL et UI donc tu va voir seulement les méthodes public qui sont utiles pour UI

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     public int CalculeTotal(list<int> montants)
    {
     
    return new facture().CalculeTotal(montants);//facture une classe de la couche BLL
    }
    et pour l'UI

    tu peux faire un appel service tout simplement sauf si tu veux partir loin dans la séparation des couches et à mon avis t'a beaucoup de travail à faire avant d'arriver à ça .

  9. #9
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    attention si ta couche entités contient des classes non sérialisables tu es obligé de créer une couche pour adapter et optimiser tes classes ( pour minimiser les trafic réseau pour le partage des données) dans un web sevice DTO (Data transfer object)

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    Bon, on va arrêter le massacre :
    - tu veux faire une application N-Tiers et tu ne comprends pas le principe : va voir un tutoriel N-Tiers
    - tu veux interroger une base de données et tu ne sais pas comment faire : va voir un tutoriel ADO.NET
    - tu veux faire des méthodes qui renvoient des DataTable et tu renvoies une string... : va voir un tutoriel .NET... (ou programmation en général même...)

    si tu avances à tâtons tu vas y passer des heures.
    si tu demandes des infos pour chaque ligne de code tu vas y passer des heures, nous aussi, et tu n'auras même pas compris ce que tu as fait.
    Ce site regorge de tutoriels et, s'ils ne te conviennent pas il y a plein d'autres tutoriels sur le web.

    Ne compte pas sur nous pour faire tes devoirs à ta place ^^

    si tu bloques à un endroit précis on sera là pour t'aider; mais fait un effort de ton côté stp.
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  11. #11
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Voici un très bon tuto pour t'entraîner : L'architecture multicouche mise en œuvre sur une application Web ASP.Net.

    Là c'est de l'ASP.NET, mais les concepts sont les mêmes pour une application WinForms. Il faut juste considérer que l'interface n'est pas une page ASPX, mais une Form.

    Mon conseil : entraîne-toi sur une petite application en reprenant exactement le même code, tu verras ainsi comment gérer les différents objets et les interactions entre les couches
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. Architecture 3 tiers : quelle est la véritable nouveauté ?
    Par unix27 dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 11/03/2007, 18h21
  2. [N-Tier] Problème conception architecture 3-tiers
    Par Royd938 dans le forum Autres
    Réponses: 3
    Dernier message: 17/06/2005, 11h47
  3. [info] Architecture 3-tiers
    Par Shiryu44 dans le forum Servlets/JSP
    Réponses: 22
    Dernier message: 29/03/2005, 10h30
  4. [VB.NET] Architecture n-tiers
    Par Dnx dans le forum ASP.NET
    Réponses: 2
    Dernier message: 08/02/2005, 19h10
  5. [Design Patterns] Architecture 3 tiers
    Par HPJ dans le forum Design Patterns
    Réponses: 1
    Dernier message: 29/07/2003, 11h49

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