Procédure pas à pas : création d'une application de données multicouche

Mise à jour : novembre 2007

Les applications de données multicouches sont des applications qui accèdent à des données et qui sont séparées en plusieurs couches logiques. La séparation des composants d'application en couches discrètes améliore la facilité de maintenance et l'évolutivité de l'application. Cela est mis en œuvre en facilitant l'adoption de nouvelles technologies qui peuvent s'appliquer à une couche unique sans qu'il ne soit nécessaire de reconcevoir entièrement la solution. L'architecture multicouche contient une couche de présentation, une couche intermédiaire et une couche de données. La couche intermédiaire contient généralement une couche d'accès aux données, une couche de logique métier et des composants partagés tels que l'authentification et la validation. La couche de données contient une base de données relationnelle. En règle générale, les applications multicouches stockent des informations sensibles dans la couche d'accès aux données de la couche intermédiaire pour garantir l'isolation avec les utilisateurs finaux qui accèdent à la couche de présentation. Pour plus d'informations, consultez Vue d'ensemble de l'application de données multicouche.

Pour séparer plusieurs couches dans une application multicouche, il est possible de créer des projets discrets pour chaque couche à inclure dans votre application. Les groupes de données typés contiennent une propriété DataSet Project qui détermine les projets dans lesquels le groupe de données et le code TableAdapter générés doivent être placés.

Cette procédure pas à pas montre comment séparer un groupe de données et un code TableAdapter en projets de bibliothèque de classes discrets à l'aide du Concepteur de DataSet. Après avoir séparé le groupe de données et le code TableAdapter, vous créerez un service Services Windows Communication Foundation et services de données ADO.NET permettant d'appeler la couche d'accès aux données. Enfin, vous créerez une application Windows Forms en tant que couche de présentation. Cette couche accède aux données à partir du service de données.

Au cours de cette procédure, vous exécuterez les étapes suivantes :

  • Créer une solution multicouche qui contient plusieurs projets.

  • Ajouter deux projets de bibliothèque de classes à la solution multicouche.

  • Créer un groupe de données typé à l'aide de l'Assistant Configuration de source de données.

  • Séparer le code TableAdapters et DataSet généré en projets discrets.

  • Créer un service Windows Communication Foundation (WCF) permettant d'appeler la couche d'accès aux données.

  • Créer des fonctions dans le service afin de récupérer les données de la couche d'accès aux données.

  • Créer une application Windows Forms faisant office de couche de présentation.

  • Créer des contrôles Windows Forms liés à la source de données.

  • Écrire du code pour remplir les tables de données.

lien vers la vidéo Pour une présentation vidéo, consultez Vidéo : Création d'une application de données multicouche.

Composants requis

Pour exécuter cette procédure pas à pas, vous devez disposer des éléments suivants :

Création de la solution multicouche et de la bibliothèque de classes pour contenir le groupe de données (DataEntityTier)

La première étape de cette procédure consiste à créer une solution et deux projets de bibliothèque de classes. La première bibliothèque de classes doit contenir le groupe de données (la classe DataSet typée et les DataTables générés qui contiennent les données de l'application). Ce projet sert de couche d'entité de données de l'application ; il est généralement situé dans la couche intermédiaire. Le Concepteur de DataSet sert à créer le groupe de données initial et à séparer automatiquement le code en deux bibliothèques de classes.

Remarque :

Veillez à attribuer un nom correct au projet et à la solution avant de cliquer sur OK. Cela permet de simplifier l'exécution de cette procédure pas à pas.

Pour créer la solution multicouche et la bibliothèque de classes DataEntityTier

  1. Dans le menu Fichier, créez un nouveau projet.

    Remarque :

    Le Concepteur de DataSet est pris en charge dans Visual Basic et dans les projets C#. Vous pouvez donc créer le projet dans l'un ou l'autre de ces langages.

  2. Dans la boîte de dialogue Nouveau projet, dans le volet Types de projets, cliquez sur Windows.

  3. Cliquez sur le modèle Bibliothèque de classes.

  4. Nommez le projet DataEntityTier.

  5. Nommez la solution NTierWalkthrough.

  6. Cliquez sur OK.

    Une solution NTierWalkthrough qui contient le projet DataEntityTier est créée et ajoutée dans l'Explorateur de solutions.

Création de la bibliothèque de classes devant contenir les TableAdapters (DataAccessTier)

Après avoir créé le projet DataEntityTier, l'étape suivante consiste à créer un autre projet de bibliothèque de classes. Ce projet doit contenir les TableAdapters générés et est appelé la couche d'accès aux données de l'application. La couche d'accès aux données contient les informations nécessaires à la connexion à la base de données. Elle est généralement située dans la couche intermédiaire.

Pour créer la bibliothèque de classes pour les TableAdapters

  1. Dans le menu Fichier, ajoutez un nouveau projet à la solution NTierWalkthrough.

  2. Dans la boîte de dialogue Nouveau projet, dans le volet Modèles, cliquez sur Bibliothèque de classes.

  3. Nommez le projet DataAccessTier, puis cliquez sur OK.

    Le projet DataAccessTier est créé et ajouté à la solution NTierWalkthrough.

Création du groupe de données

L'étape suivante consiste à créer un groupe de données typé. Les groupes de données typés sont créés avec la classe DataSet (y compris les classes DataTables) et les classes TableAdapter dans un projet unique. (Toutes les classes sont générées dans un seul fichier.) Lorsque vous séparez le groupe de données et les TableAdapters dans des projets différents, la classe DataSet est déplacée vers l'autre projet. Les classes TableAdapter restent dès lors dans le projet d'origine. Par conséquent, créez le groupe de données dans le projet qui doit contenir les TableAdapters (projet DataAccessTier). Vous créez le groupe de données à l'aide de l'Assistant Configuration de source de données.

Remarque :

Vous devez avoir accès à l'exemple de base de données Northwind pour créer la connexion. Pour plus d'informations sur l'installation de l'exemple de base de données Northwind, consultez Comment : installer des exemples de bases de données.

Pour créer le groupe de données

  1. Cliquez sur DataAccessTier dans l'Explorateur de solutions.

  2. Dans le menu Données, cliquez sur Afficher les sources de données.

  3. Dans la fenêtre Sources de données, cliquez sur Ajouter une nouvelle source de données pour démarrer l'Assistant Configuration de source de données.

  4. Dans la page Choisir un type de source de données, cliquez sur Base de données, puis sur Suivant.

  5. Dans la page Choisir votre connexion de données, effectuez l'une des opérations suivantes :

    Si une connexion de données à l'exemple de base de données Northwind est disponible dans la liste déroulante, cliquez dessus.

    - ou -

    Cliquez sur Nouvelle connexion pour ouvrir la boîte de dialogue Ajouter une connexion. Pour plus d'informations, consultez Ajouter/Modifier une connexion, boîte de dialogue (Général).

  6. Si un mot de passe est requis pour la base de données, sélectionnez l'option pour inclure les données sensibles, puis cliquez sur Suivant.

    Remarque :

    Si vous avez sélectionné un fichier de base de données local (au lieu de vous connecter à SQL Server), le système peut vous demander si vous souhaitez ajouter le fichier au projet. Cliquez sur Oui pour ajouter le fichier de base de données au projet.

  7. Cliquez sur Suivant dans la page Enregistrer la chaîne de connexion dans le fichier de configuration de l'application.

  8. Développez le nœud Tables dans la page Choisir vos objets de base de données.

  9. Activez les cases à cocher pour les tables Customers et Orders, puis cliquez sur Terminer.

    NorthwindDataSet est ajouté au projet DataAccessTier et s'affiche dans la fenêtre Sources de données.

Séparation des TableAdapters du groupe de données

Après avoir créé le groupe de données, séparez la classe DataSet générée des TableAdapters. Pour ce faire, attribuez à la propriété Projet DataSet le nom du projet qui doit stocker la classe DataSet séparée.

Pour séparer les TableAdapters du groupe de données

  1. Double-cliquez sur NorthwindDataSet.xsd dans l'Explorateur de solutions pour ouvrir le groupe de données dans le Concepteur de DataSet.

  2. Cliquez sur une zone vide du concepteur.

  3. Localisez le nœud Projet DataSet dans la fenêtre Propriétés.

  4. Dans la liste Projet DataSet, cliquez sur DataEntityTier.

  5. Dans le menu Générer, cliquez sur Générer la solution.

Le groupe de données et les TableAdapters sont séparés dans les deux projets de bibliothèque de classes. Le projet qui contenait à l'origine le groupe de données entier (DataAccessTier) ne contient à présent que les TableAdapters. Le projet désigné dans la propriété Projet DataSet (DataEntityTier) contient le groupe de données typé : NorthwindDataSet.Dataset.Designer.vb (ou NorthwindDataSet.Dataset.Designer.cs).

Remarque :

Lorsque vous séparez des groupes de données et des TableAdapters (en définissant la propriété Projet DataSet), les classes DataSet partielles existant dans le projet ne sont pas automatiquement déplacées. En effet, ces classes doivent être déplacées manuellement vers le projet DataSet.

Création d'une application de service

Cette procédure pas à pas indique comment accéder à la couche d'accès aux données à l'aide d'un service WCF. Par conséquent, vous devez créer une application de service WCF.

Pour créer une application de service WCF

  1. Dans le menu Fichier, ajoutez un nouveau projet à la solution NTierWalkthrough.

  2. Dans la boîte de dialogue Nouveau projet, dans le volet Types de projets, cliquez sur WCF. Dans le volet Modèles, cliquez sur Bibliothèque du service WCF.

  3. Nommez le projet DataService, puis cliquez sur OK.

    Le projet DataService est créé et ajouté à la solution NTierWalkthrough.

Création de méthodes dans la couche d'accès aux données pour retourner les données Customers et Orders

Le service de données doit appeler deux méthodes dans la couche d'accès aux données : GetCustomers et GetOrders. Ces méthodes retournent les tables Northwind Customers et Orders. Créez les méthodes GetCustomers et GetOrders dans le projet DataAccessTier.

Pour créer une méthode dans la couche d'accès aux données qui retourne la table Customers

  1. Dans l'Explorateur de solutions, double-cliquez sur NorthwindDataset.xsd pour ouvrir le groupe de données dans le Concepteur de DataSet.

  2. Cliquez avec le bouton droit sur CustomersTableAdapter, puis cliquez sur Ajouter une requête pour ouvrir l'Assistant Configuration de requêtes TableAdapter, (voir Assistant Configuration de requêtes TableAdapter).

  3. Sur la page Choisissez un type de commande, conservez la valeur par défaut (Utiliser des instructions SQL), puis cliquez sur Suivant.

  4. Sur la page Choisir un type de requête, conservez la valeur par défaut (SELECT qui retourne des lignes), puis cliquez sur Suivant.

  5. Sur la page Spécifier une instruction SQL SELECT, conservez la requête par défaut, puis cliquez sur Suivant.

  6. Sur la page Choisir les méthodes à générer, tapez GetCustomers dans le champ Nom de la méthode de la section Retourner un DataTable.

  7. Cliquez sur Terminer.

Pour créer une méthode dans la couche d'accès aux données qui retourne la table Orders

  1. Cliquez avec le bouton droit sur OrdersTableAdapter, puis cliquez sur Ajouter une requête.

  2. Sur la page Choisissez un type de commande, conservez la valeur par défaut (Utiliser des instructions SQL), puis cliquez sur Suivant.

  3. Sur la page Choisir un type de requête, conservez la valeur par défaut (SELECT qui retourne des lignes), puis cliquez sur Suivant.

  4. Sur la page Spécifier une instruction SQL SELECT, conservez la requête par défaut, puis cliquez sur Suivant.

  5. Sur la page Choisir les méthodes à générer, tapez GetOrders dans le champ Nom de la méthode de la section Retourner un DataTable.

  6. Cliquez sur Terminer.

  7. Dans le menu Générer, cliquez sur Générer la solution.

Ajout d'une référence aux couches d'entité de données et d'accès aux données au service de données

Le service de données nécessite des informations provenant du groupe de données et des TableAdapters. Par conséquent, vous devez ajouter des références aux projets DataEntityTier et DataAccessTier.

Pour ajouter des références au service de données

  1. Cliquez avec le bouton droit sur DataService dans l'Explorateur de solutions, puis cliquez sur Ajouter une référence.

  2. Dans la boîte de dialogue Ajouter une référence, cliquez sur l'onglet Projets.

  3. Sélectionnez les projets DataAccessTier et DataEntityTier.

  4. Cliquez sur OK.

Ajout de fonctions au service pour appeler les méthodes GetCustomers et GetOrders dans la couche d'accès aux données

La couche d'accès aux données contient désormais les méthodes permettant de retourner les données. Vous devez ensuite créer des méthodes dans le service de données pour appeler les méthodes dans la couche d'accès aux données.

Remarque :

Pour les projets C#, vous devez ajouter une référence à l'assembly System.Data.DataSetExtensions pour pouvoir compiler le code suivant.

Pour créer les fonctions GetCustomers et GetOrders dans le service de données

  1. Dans le projet DataService, double-cliquez sur IService1.vb ou sur IService1.cs.

  2. Ajoutez le code suivant sous le commentaire Ajoutez vos opérations de service ici :

    <OperationContract()> _
    Function GetCustomers() As DataEntityTier.NorthwindDataSet.CustomersDataTable
    
    <OperationContract()> _
    Function GetOrders() As DataEntityTier.NorthwindDataSet.OrdersDataTable
    
    [OperationContract]
    DataEntityTier.NorthwindDataSet.CustomersDataTable GetCustomers();
    
    [OperationContract]
    DataEntityTier.NorthwindDataSet.OrdersDataTable GetOrders();
    
  3. Dans le projet DataService, double-cliquez sur Service1.vb (ou sur Service1.cs).

  4. Ajoutez le code suivant à la classe Service1 :

    Public Function GetCustomers() As DataEntityTier.NorthwindDataSet.CustomersDataTable Implements IService1.GetCustomers
        Dim CustomersTableAdapter1 As New DataAccessTier.NorthwindDataSetTableAdapters.CustomersTableAdapter
        Return CustomersTableAdapter1.GetCustomers()
    End Function
    
    Public Function GetOrders() As DataEntityTier.NorthwindDataSet.OrdersDataTable Implements IService1.GetOrders
        Dim OrdersTableAdapter1 As New DataAccessTier.NorthwindDataSetTableAdapters.OrdersTableAdapter
        Return OrdersTableAdapter1.GetOrders()
    End Function
    
    public DataEntityTier.NorthwindDataSet.CustomersDataTable GetCustomers()
    {
        DataAccessTier.NorthwindDataSetTableAdapters.CustomersTableAdapter
             CustomersTableAdapter1
            = new DataAccessTier.NorthwindDataSetTableAdapters.CustomersTableAdapter();
        return CustomersTableAdapter1.GetCustomers();
    
    }
    public DataEntityTier.NorthwindDataSet.OrdersDataTable GetOrders()
    {
        DataAccessTier.NorthwindDataSetTableAdapters.OrdersTableAdapter
             OrdersTableAdapter1
            = new DataAccessTier.NorthwindDataSetTableAdapters.OrdersTableAdapter();
        return OrdersTableAdapter1.GetOrders();
    
    }
    
  5. Dans le menu Générer, cliquez sur Générer la solution.

Création d'une couche de présentation pour afficher les données du service de données

La solution contient à présent le service de données qui inclut des méthodes permettant d'appeler la couche d'accès aux données. Vous devez ensuite créer un autre projet qui doit appeler le service de données et présenter les données aux utilisateurs. Dans le cadre de cette procédure, vous créez une application Windows Forms, c'est-à-dire la couche de présentation de l'application multicouche.

Pour créer le projet de couche de présentation

  1. Dans le menu Fichier, ajoutez un nouveau projet à la solution NTierWalkthrough.

  2. Dans la boîte de dialogue Nouveau projet, dans le volet Types de projets, cliquez sur Windows. Dans le volet Modèles, cliquez sur Application Windows Forms.

  3. Nommez le projet PresentationTier, puis cliquez sur OK.

  4. Le projet PresentationTier est créé et ajouté à la solution NTierWalkthrough.

Définition du projet PresentationTier en tant que projet de démarrage

La couche de présentation correspondant à l'application cliente réelle utilisée pour présenter les données et interagir avec elles, vous devez définir le projet PresentationTier en tant que projet de démarrage.

Pour définir le nouveau projet de couche de présentation en tant que projet de démarrage

  • Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PresentationTier, puis cliquez sur Définir comme projet de démarrage.

Ajout de références à la couche de présentation

L'application cliente PresentationTier nécessite une référence au service de données pour pouvoir accéder aux méthodes du service. En outre, une référence au groupe de données est nécessaire pour activer le partage de type par le service WCF. Tant que vous n'activez pas le partage de type via le service de données, le code ajouté à la classe DataSet partielle n'est pas disponible pour la couche de présentation. En règle générale, vous ajoutez du code tel que la validation aux événements de modification de ligne et de colonne d'une table de données. Par conséquent, vous souhaiterez probablement accéder à ce code à partir du client. Pour plus d'informations, consultez Utilisation des services WCF dans Visual Studio.

Pour ajouter une référence à la couche de présentation

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PresentationTier, puis cliquez sur Ajouter une référence.

  2. Dans la boîte de dialogue Ajouter une référence, cliquez sur l'onglet Projets.

  3. Sélectionnez DataEntityTier, puis cliquez sur OK.

Pour ajouter une référence de service à la couche de présentation

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PresentationTier, puis cliquez sur Ajouter une référence de service.

  2. Dans la boîte de dialogue Ajouter une référence de service, cliquez sur Découvrir.

  3. Sélectionnez Service1, puis cliquez sur OK.

    Remarque :

    Si vous disposez de plusieurs services sur l'ordinateur actuel, sélectionnez celui que vous avez créé précédemment dans cette procédure (le service qui contient les méthodes GetCustomers et GetOrders).

Ajout de DataGridViews au formulaire pour afficher les données retournées par le service de données

Une fois la référence au service de données ajoutée, la fenêtre Sources de données est automatiquement remplie en fonction des données retournées par le service.

Pour ajouter deux DataGridViews liés aux données au formulaire

  1. Dans l'Explorateur de solutions, sélectionnez le projet PresentationTier.

  2. Dans la fenêtre Sources de données, développez NorthwindDataSet, puis recherchez le nœud Customers.

  3. Faites glisser le nœud Customers vers Form1.

  4. Dans la fenêtre Sources de données, développez le nœud Customers et recherchez le nœud Orders connexe (le nœud Orders imbriqué dans le nœud Customers).

  5. Faites glisser le nœud Orders connexe vers Form1.

  6. Créez un gestionnaire d'événements Form1_Load en double-cliquant sur une zone vide du formulaire.

  7. Ajoutez le code suivant au gestionnaire d'événements Form1_Load.

    Dim DataSvc As New ServiceReference1.Service1Client
    NorthwindDataSet.Customers.Merge(DataSvc.GetCustomers)
    NorthwindDataSet.Orders.Merge(DataSvc.GetOrders)
    
    ServiceReference1.Service1Client DataSvc = 
        new ServiceReference1.Service1Client();
    northwindDataSet.Customers.Merge(DataSvc.GetCustomers());
    northwindDataSet.Orders.Merge(DataSvc.GetOrders());
    

Augmentation de la taille maximale de message autorisée par le service

Le service retourne des données issues des tables Customers et Orders. Par conséquent, la valeur par défaut de maxReceivedMessageSize doit être augmentée, car elle ne suffit pas pour contenir les données. Pour cette procédure pas à pas, vous remplacez la valeur par 6553600. Vous modifiez cette valeur sur le client, puis la référence de service est automatiquement mise à jour.

Remarque :

La taille par défaut inférieure vise à limiter l'exposition aux attaques par déni de service (DoS, Denial of Service). Pour plus d'informations, consultez MaxReceivedMessageSize.

Pour augmenter la valeur maxReceivedMessageSize

  1. Dans l'Explorateur de solutions, double-cliquez sur le fichier app.config dans le projet PresentationTier.

  2. Recherchez l'attribut de taille maxReceivedMessage et remplacez la valeur par 6553600.

Test de l'application

Exécutez l'application. Les données sont extraites du service de données et s'affichent dans le formulaire.

Pour tester l'application

  1. Appuyez sur F5.

  2. Les données des tables Customers et Orders sont extraites du service de données et s'affichent dans le formulaire.

Étapes suivantes

Selon les spécifications de votre application, vous pouvez exécuter différentes étapes après l'enregistrement des données connexes dans une application Windows. Par exemple, vous pouvez apporter les améliorations suivantes à cette application :

Voir aussi

Concepts

Nouveautés des données

Autres ressources

Applications de données multicouches

Mise à jour hiérarchique

Accès aux données (Visual Studio)