IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Exemple d'architecture à 3 couches en Visual Basic

Le 17 mars 2003

Par Romain Puyfoulhoux

Sommaire

1. Exemple d'application classique
2. Rôle de chacune des couches
3. Avantages de cette architecture
4. Exemple d'architecture à 3 couches
   4.1 Couche données
   4.2 Couche métier
   4.3 Couche présentation


4.2 Couche métier (suite)

Voici la classe clsCompte :

Option Explicit

Public Enum RulesErrorEnum
   rlErrorReadOnly = 5000
   rlErrorIncorrectValue = 5001
End Enum

Private m_id As Long
Private m_numero As String
Private m_dateCreation As Date
Private m_solde As Single
Private m_idProprietaire As Long
Private m_loaded As Boolean

Property Get Id() As Long
Id = m_id
End Property

Property Get DateCreation() As Date
DateCreation = m_dateCreation
End Property

Property Get Numero() As String
Numero = m_numero
End Property

Property Let Numero(LeNumero As String)

If m_loaded Then
   Err.Raise rlErrorReadOnly, "Rules.clsCompte", "Le numéro d'un compte ne peut pas être modifié."
Else
   If IsNull(LeNumero) Or (Not IsNumeric(LeNumero)) Then
      Err.Raise rlErrorIncorrectValue, "Rules.clsCompte", "La valeur spécifiée pour un numéro de compte est incorrecte."
   Else
      m_numero = LeNumero
   End If
End If

End Property

Property Get Solde() As Single
Solde = m_solde
End Property

Property Let Solde(nouveauSolde As Single)
m_solde = nouveauSolde
End Property

Property Get Proprietaire() As Long
Proprietaire = m_idProprietaire
End Property

Property Let Proprietaire(idProprietaire As Long)

If m_loaded Then
   Err.Raise rlErrorReadOnly, "Rules.clsCompte", "Le propriétaire d'un compte ne peut pas être modifié."
Else
   m_idProprietaire = idProprietaire
End If

End Property

Public Function Load(idCompte As Long) As Boolean

Dim objData As clsData, sql As String, rst As ADODB.Recordset

On Error GoTo fail

sql = "SELECT * FROM tCompte WHERE co_id=" & Id

Set objData = New clsData
Set rst = objData.CreeRecordset(sql)

If Not rst.EOF Then
   m_id = rst("co_Id").Value
   m_numero = rst("co_numero").Value
   m_dateCreation = rst("co_DateCreation").Value
   m_solde = rst("co_Idprop")
   m_loaded = True
   Load = True
End If
rst.Close
Set rst = Nothing
Exit Function

fail:
Err.Raise Err.Number, "Rules.clsCompte", Err.Description

End Function

Public Function Save() As Boolean

Dim objData As clsData, sql As String, cnn As ADODB.Connection

On Error GoTo fail

If Id() > 0 Then
   sql = "UPDATE tCompte SET solde=" & Solde() & " WHERE co_Id=" & Id()
Else
   sql = "INSERT INTO tCompte (co_solde,co_IdProp,co_DateCreation,co_numero) VALUES (" & _
      Solde & "," & Proprietaire() & ",#" & Format(Date, "mm/dd/yyyy") & "#,'" & Numero() & "')"
End If

Set objData = New clsData
Set cnn = objData.CreeConnexion()
cnn.Execute sql
Save = True

cnn.Close
Set cnn = Nothing
Set objData = Nothing
Exit Function

fail:
Err.Raise Err.Number, "Rules.clsCompte", Err.Description

End Function

Private Sub Class_Initialize()
m_dateCreation = Date
End Sub

Ceci n'est qu'un aperçu de ce que pourrait être la classe clsCompte dans une application complète. Elle doit contenir toutes les règles de fonctionnement relatives à un compte. Les valeurs des champs ne sont modifiables que par l'intermédiaire des propriétés de la classe, qui contrôlent leur modification. Par exemple, il est interdit de modifier le numéro du compte si celui-ci a déjà été créé.
Un compte est lu avec la méthode Load(). La méthode Save() permet d'ajouter un nouveau compte ou d'enregistrer les modifications effectuées sur un compte existant.

4.3 Couche présentation

A ce stade nous n'avons plus qu'à programmer l'interface, qui affichera les données et effectuera les commandes demandées par l'utilisateur, et ceci simplement en manipulant les objets de la couche métier.

Pour créer cette couche, ajoutez un projet de type Exe Standard. Ajoutez l'activeX Rules dans ses références.
Voici ce que devient notre code source du premier chapitre, qui affichait les comptes d'une personne dans une datagrid :

Private Sub btnSearch_Click()

Dim services As clsServices, rst As ADODB.Recordset

On Error GoTo fail
Set services = New clsServices
Set rst = services.ListeComptes(CLng(Text1.Text))
Set DataGrid1.DataSource = rst
Exit Sub

fail:
Select Case Err.Number
    Case 13:
        MsgBox "Vous devez saisir un numérique."
    Case Else:
        MsgBox Err.Source & ": " & "Erreur n° " & Err.Number & ": " & Err.Description
End Select

End Sub

Vous pouvez télécharger les sources.


[ Précédent ]

Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici.
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.