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.
|