Section courante

A propos

Section administrative du site

Introduction

La technologie dit en «N-tiers» est une technique visant à isolé chacun des trois niveaux de traitement d'un système de gestion. Les avantages apporté sont la sécurité, performance et la possibilité d'exécuter les processus sur plusieurs serveurs distinct. Les trois paliers sont donc les suivants :

Ainsi, on retrouve donc trois couches de code totalement distinguent mais ascendante. Les dépendances ont lieu systématiquement vers le niveau le plus bas, sens jamais que la partie du bas (BD) est conscience de la partie du haut (ASP). On retrouve de se fait les trois parties suivantes :

Prérequis

Les prérequis serveur, sont le support de l'ASP 3.0, et optionnellement XSL et XML. On devra donc avoir un serveur Windows NT 4, Windows 2000 Server ou Windows Server 2003.

Installation

Une fois créer votre DLL en VB, on doit passer directement par COM+ (Component Object Model). Généralement, celle-ci fera une liaison avec un «Microsoft Jet» en utilisant des requêtes SQL.

Création du projet dans le Service des Composants (COM+): Ce service est disponible dans les Outils d'administrateur (Activez-le dans les options du «Barre de tâche» et «Menu Démarrer» s'il n'est pas présent). On doit donc, en premier lieu, créer un projet du nom de votre choix "projet1" dans le répertoire «/Services de composantes/Ordinateurs/Poste de travail/Application COM+» (Note : Poste de travail peut-être aussi le nom d'un serveur distinct).

Pour se faire, on clique sur le deuxième bouton de la souris sur l'identifiant «Application COM+». On choisit dans ce menu «Nouveau > Application». Ensuite on suit les étapes suivantes:

Ajout des composants DLLIl faut également ajouter dans le projet la liste des DLLs à exploiter pour le projet de votre choix. Pour se faire, on va sur le sous-répertoire «Composant» de répertoire de votre projet et on appuie sur le deuxième bouton de la souris afin de pouvoir sélectionner l'option «Nouveau > Composant».

Développement

Développement des bibliothèques sous Visual Basic : Lors du développement d'une bibliothèque à l'aide de l'outil de programmation Visual Basic, on ne peut malheureusement pas simplement écrire le code et l'exécuter comme on le ferait d'habitude pour un projet classique. On doit tenir compte de plusieurs éléments :

Création de la bibliothèque : La création de la bibliothèque sous forme d'une DLL se fera à l'aide du menu Fichier, avec l'option Crée [...]. En somme, on obtiendra à l'aide de cette option le résultat final de notre bibliothèque.

ATTENTION ! Si vous rencontrez un problème de «Permission refuser» lors de cette opération, il peut s'agir principalement des trois problèmes suivants :

La bibliothèque de données: Dans ce DLL, on retrouve différentes classes construites de façon relativement primaire. On constatera donc, la présence de fonction comme Load, Insert, Update et Delete. Ceux-ci permettent d'effectuer les différentes mise-à-jour nécessaire ou simplement consulter de l'information. Aucune connaissance n'est retenu à se niveau. De se fait, après avoir appelé une fonction d'une de ces classes, il n'y a aucun souvenir de garder par l'ordinateur à se niveau.

On retrouvera en plus des noms comme «GetCandidat» ou «GetTypeEmployee» permettant de retourner différentes informations d'une autre table mais ayant une dépendance avec celle-ci.

ATTENTION : Dans les propriétés de démarrage, bien définir l'objet Sub Main.

La structure de programmation d'une fonction effectuant une requête SQL devrait avoir l'aspect suivant sous le Visual Basic :

Public Function fonction(paramètres) As ADODB.Recordset
    Dim sSql As String
    sSql = "requête"
    Set fonction = OpenRecordSet(sSql)
End Function

La bibliothèque Affaire : Dans se DLL, on retrouve tout le traitement de façon concret de la donnée. Dans cette couche, on retrouve les validations comme pour un code postal n'ayant pas les bons formats, un numéro de téléphone ressemblant à un numéro de 6/49 par exemple. En somme, toutes informations incohérentes est testé dans les classes dans une procédure portant le nom «Validate». On a donc, vous le comprendrez, des variables locales pour la classes, permettant de mémoriser le contenu d'un enregistrement d'un table. Pour, par exemple, éventuellement sauvegarder ses mêmes informations ou simplement effectué une mise-à-jour.

Note de bug Visual Basic : Il arrive parfois qu'il ne retrouve plus la classe de votre bibliothèque de données et dans ce cas, on va dans le menu «Projet» dans l'item «Référence» on décoche la classe. Et on le ferme comme ça, ensuite on repasse par le même chemin et on clique sur votre bibliothèque de données.

L'ASP: Dans cette zone, vous ne trouverez rien d'autre que des pages envoyées à des clients sur leurs navigateurs Internet (d'où le nom Client/Serveur) et ainsi, toutes les informations contenu entre les symboles «<%» et «%>» est interprétés par le serveur avant d'être envoyé au navigateur en ayant fait la demande. Tout le reste n'a aucune interprétation avant d'être envoyé au client.

Le code

Voici maintenant un exemple de ce à quoi ressemble les trois niveaux de codes. Tous d'abord la partie données :

  1. ' Cette classe permet de gérer une des données au niveau de la base de données.
  2.  
  3. Option Explicit
  4.  
  5. Public ConnectionString As String
  6. Public Cnx As ADODB.Connection
  7.  
  8. ' ////////////////////////////////////////////////////////////////////
  9. ' OpenRecordSet
  10. ' Cette fonction retourne un «RecordSet» déconnecté
  11. ' ////////////////////////////////////////////////////////////////////
  12. Public Function OpenRecordSet(ByVal sSql As String) As ADODB.Recordset
  13.     Dim oRs As New ADODB.Recordset
  14.     oRs.CursorLocation = adUseClient
  15.     oRs.Open sSql, IIf(Cnx Is Nothing, ConnectionString, Cnx), adOpenForwardOnly, adLockReadOnly
  16.     Set oRs.ActiveConnection = Nothing
  17.     Set OpenRecordSet = oRs
  18.     Set oRs = Nothing
  19. End Function
  20.  
  21. ' ********************************************************************
  22. ' ExecuteSQL
  23. ' Permet d'exécuter une requête SQL
  24. ' ********************************************************************
  25. Public Sub ExecuteSQL(ByVal sSql As String)
  26.     If Cnx Is Nothing Then
  27.         Set Cnx = New ADODB.Connection
  28.         Cnx.Open ConnectionString
  29.         Cnx.Execute sSql
  30.         Cnx.Close
  31.         Set Cnx = Nothing
  32.     Else
  33.         Cnx.Execute sSql
  34.     End If
  35. End Sub
  36.  
  37. ' ********************************************************************
  38. ' SqlString
  39. ' Cette fonction ajoute les apostrophes pour être compatible SQL.
  40. ' **********************************************************************
  41. Public Function SqlString(ByVal sString As String) As String
  42.     If sString = Empty Then
  43.         SqlString = "NULL"
  44.     Else
  45.         SqlString = "'" & Replace(sString, "'", "''") & "'"
  46.     End If
  47. End Function
  48.  
  49. ' ******************************************************************************
  50. ' Cette fonction retourne un identificateur unique d'enregistrement
  51. ' ******************************************************************************
  52. Public Function GenerateNewID(ByVal FieldName As String, ByVal TableName As String) As Long
  53.     Dim oRs As ADODB.Recordset
  54.     Dim sSql As String
  55.     sSql = "SELECT MAX(" & FieldName & ") AS MaxNo FROM " & TableName
  56.     Set oRs = OpenRecordSet(sSql)
  57.     GenerateNewID = (oRs!MaxNo) + 1
  58.     oRs.Close
  59.     Set oRs = Nothing
  60. End Function
  61.  
  62. ' ******************************************************************************
  63. ' getEntreprise
  64. ' Charge les entreprises dans un recordset
  65. ' ******************************************************************************
  66. Public Function getEntreprise() As ADODB.Recordset
  67.     Dim sSql As String
  68.     sSql = "SELECT * FROM vosentreprises ORDER BY NomEntreprise"
  69.     Set getCompagnie = OpenRecordSet(sSql)
  70. End Function
  71.  
  72. ' ******************************************************************************
  73. ' Load
  74. ' Charge l'entreprise dans un recordset
  75. ' ******************************************************************************
  76. Public Function Load(ByVal lID As Long) As ADODB.Recordset
  77.     Dim sSql As String
  78.     sSql = "SELECT * FROM vosentreprises " & _
  79.            " ORDER BY NomTypeEntreprise" & _
  80.            " FROM TypeEntreprise" & _
  81.            " WHERE ID = " & lID
  82.     Set Load = OpenRecordSet(sSql)
  83. End Function
  84.  
  85. ' ******************************************************************************
  86. ' Insert
  87. ' Insertion d'un enregistrement dans la base de données
  88. ' ******************************************************************************
  89. Public Sub Insert(ByRef NoTypeEntreprise As Long, _
  90.                   ByVal NomTypeEntreprise As String)
  91.     Dim sSql As String
  92.     NoTypeEntreprise = GenerateNewID("NoEntreprise", "TypeEntreprise")
  93.     sSql = "INSERT INTO TypeEntreprise" & _
  94.                " (NoTypeEntreprise, NomTypeEntreprise" & _
  95.                ") VALUES (" & _
  96.                NoTypeEntreprise & _
  97.                "," & SqlString(NomTypeEntreprise) & ")"
  98.     ExecuteSQL sSql
  99. End Sub
  100.  
  101. ' ******************************************************************************
  102. ' Update
  103. ' Mise à jour de l'enregistrement dans la base de données
  104. ' ******************************************************************************
  105. Public Sub Update(ByVal NoTypeEntreprise As Long, _
  106.                   ByVal NomTypeEntreprise As String)
  107.     Dim sSql As String
  108.     sSql = "UPDATE TypeEntreprise SET" & _
  109.            " NomTypeEntreprise = " & SqlString(NomTypeEntreprise) & _
  110.            " WHERE NoTypeEntreprise = " & NoTypeEntreprise
  111.     ExecuteSQL sSql
  112. End Sub
  113.  
  114. ' ******************************************************************************
  115. ' Delete
  116. ' Supprime l'entreprise de la base de données
  117. ' ******************************************************************************
  118. Public Sub Delete(ByVal Code As Long)
  119.     Dim sSql As String
  120.     sSql = "DELETE FROM TypeEntreprise" & _
  121.           " WHERE NoTypeEntreprise = " & Code
  122.     ExecuteSQL sSql
  123. End Sub

Voici le code de la bibliothèque d'affaire faisant appel à la classe de la bibliothèque de données :

  1. ' Cette classe permet d'offrir différent service à propos d'une entreprise.
  2.  
  3. Option Explicit
  4.  
  5. Public NoTypeEntreprise As Long
  6. Public NomEntreprise As String
  7.  
  8. ' ******************************************************************************
  9. ' Load
  10. ' Charge la entreprise dans les variables de l'objet
  11. ' ******************************************************************************
  12. Public Sub Load(ByVal lID As Long)
  13.     Dim oEntrepriseDB As New projet_DB.Entreprise
  14.     Dim oRs As ADODB.Recordset
  15.     Set oRs = oEntrepriseDB.Load(lID)
  16.     If oRs.EOF Then
  17.         NoTypeEntreprise = 0
  18.         NomEntreprise = ""
  19.     Else
  20.         NoTypeEntreprise = oRs!NoTypeEntreprise
  21.         NomEntreprise = oRs!NomTypeEntreprise
  22.     End If
  23.     oRs.Close
  24.     Set oRs = Nothing
  25.     Set oEntrepriseDB = Nothing
  26. End Sub
  27.  
  28. ' ******************************************************************************
  29. ' Insert
  30. ' Insertion d'un enregistrement dans la base de données
  31. ' ******************************************************************************
  32. Public Sub Insert()
  33.     Dim oEntrepriseDB As New projet_DB.Entreprise
  34.     Validate
  35.     oEntrepriseDB.Insert NoTypeEntreprise, _
  36.                         NomEntreprise
  37.     Set oEntrepriseDB = Nothing
  38. End Sub
  39.  
  40. ' ******************************************************************************
  41. ' Update
  42. ' Mise à jour de l'enregistrement dans la base de données
  43. ' ******************************************************************************
  44. Public Sub Update()
  45.     Dim oEntrepriseDB As New projet_DB.Entreprise
  46.     Validate
  47.     oEntrepriseDB.Update NoTypeEntreprise, _
  48.                         NomEntreprise
  49.     Set oEntrepriseDB = Nothing
  50. End Sub
  51.  
  52. ' ******************************************************************************
  53. ' Delete
  54. ' Supprime l'entreprise de la base de données
  55. ' ******************************************************************************
  56. Public Sub Delete()
  57.    Dim oEntrepriseDB As New projet_DB.Entreprise
  58.     oEntrepriseDB.Delete NoTypeEntreprise
  59.     Set oEntrepriseDB = Nothing
  60. End Sub
  61.  
  62. ' ******************************************************************************
  63. ' Validate
  64. ' Effectue les validations d'affaires avant la mise à jour de l'enregistrement
  65. ' ******************************************************************************
  66. Private Sub Validate()
  67.     If DescriptionF = Empty Then
  68.         Err.Raise vbObjectError, "Type d'Entreprise", "ERR_DESC_TYPE_ENTREPRISE_F_REQUISE"
  69.     End If
  70. End Sub

Voici finalement la partie interface écrite en ASP :

  1. <%
  2. Set oEntreprise = server.CreateObject("projet_Bus.Entreprise")
  3. oEntreprise.Load Request("ID")
  4. Response.Write oEntreprise.NomEntreprise
  5. %>


Dernière mise à jour : Vendredi, le 13 janvier 2012