Bonjour, voila un peu près un an que je me suis mis à développé en VB.net c'était du développement en vrac alors je me suis dis que j'allais me mettre à la programmation multi-couche.
J'ai donc réalisé un début de programme avec juste un formulaire d'inscription qui insere dans une base de donnée Access en ADO.net.
Voila je voudrai savoir se que vous en pensiez ? savoir si c'est une bonne base ?

IHM
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 
'ajout référence vers BEL
Imports BEL
'ajout référence vers BEL
Imports BPL
'ajout référence vers DAL
Imports DAL
 
 
Public Class Inscription
 
    Private au As New AccessUsers
 
    Private Sub AjouterUser(ByVal login As String, ByVal password As String, ByVal question As String, ByVal reponse As String)
        Dim NewUser As USER = New USER(login, password, question, reponse)
        Dim UserBPL As New BPL.BPLuser
        UserBPL.BPL_Ajouter(NewUser)
    End Sub
 
 
    Private Sub Binscription_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Binscription.Click
        Dim nbvide As Integer
        'RAZ des erreurs
        EP.Clear()
 
        'permet de parcourir tous les champs
        For Each ctrl In GBinscription.Controls
            'si TextBox
            If TypeOf ctrl Is TextBox Then
                If TBtaille(ctrl, 10) Then
                    EP.SetError(ctrl, "Champ " & ctrl.name & " doit contenir 10 caractères")
                    nbvide = +1
                End If
                'si ComboBox
            ElseIf TypeOf ctrl Is ComboBox Then
                If CBvide(ctrl) Then
                    EP.SetError(ctrl, "Aucune donnée sélectionnée ")
                    nbvide = +1
                End If
            End If
        Next
 
        'aucun champ n'est vide
        If nbvide = 0 Then
            Try
                au.table_utilisateur()
                AjouterUser(TBlogin.Text, TBpassword.Text, CBquestion.Text, TBreponse.Text)
            Catch ex As Exception
                MessageBox.Show(ex.Message, ".:: ERREUR", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        End If
    End Sub
 
    Private Sub Inscription_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Fermeture_Form(Me, e)
    End Sub
 
End Class
avec un module (mes fonctions perso)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
Module fonctions
 
    'permet de basculer d'un form (fermeture) à un autre (ouverture)
    ' sans se soucier de la fermeture
    Public Sub Changement_Form(ByVal fr_ferme As Form, ByVal fr_ouvre As Form)
        fr_ferme.Visible = False
        fr_ouvre.Show()
        fr_ferme.Close()
    End Sub
 
    'fermeture d'un form
    'param : form, evenement de fermeture
    Public Sub Fermeture_Form(ByVal fr_ferme As Form, ByVal e As System.Windows.Forms.FormClosingEventArgs)
        If fr_ferme.Visible = True Then
            If MessageBox.Show("Fermer " & fr_ferme.Name & " en cours ?", ".:: Fermeture", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No Then
                'annulation de l'événement de fermeture
                e.Cancel = True
            End If
        End If
    End Sub
 
    'Test la taille de la valeur du TextBox
    'param : TextBox & taille de l'on veut
    Public Function TBtaille(ByVal TB As TextBox, ByVal taille As Integer) As Boolean
        Return TB.TextLength < taille
    End Function
 
    'vérifie si TextBox vide
    Private Function TBvide(ByVal tb As TextBox) As Boolean
        'return true si vide
        Return tb.Text = ""
    End Function
 
    'Test si ComboBox vide
    Public Function CBvide(ByVal CB As ComboBox) As Boolean
        Return CB.Text = ""
    End Function
 
    'Test composant vide GB
    Public Function Parcours_GB(ByVal GB As GroupBox, ByRef ep As ErrorProvider) As Integer
        ' competeur nb de Controls vide
        Dim nbctrlvide As Integer = 0
        'Pour chaque CTRL dans le GroupBox
        For Each ctrl In GB.Controls
            'Si le type est TextBox
            If TypeOf ctrl Is TextBox Then
                'Si fonction TBvide = true
                If TBvide(ctrl) Then
                    nbctrlvide += 1
                    ep.SetError(ctrl, "Champ " & ctrl.name & " vide !")
                End If
                'Si le type est ComboBox
            ElseIf TypeOf ctrl Is ComboBox Then
                'Si fonction TBvide = true
                If CBvide(ctrl) Then
                    nbctrlvide += 1
                    ep.SetError(ctrl, "Sélection " & ctrl.name & " vide !")
                End If
            End If
        Next
        Return nbctrlvide
    End Function
End Module
DAL : une class Connexion
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
' Ajout référence : Microsoft ADO Ext. 2.8 for DDL and Security
Imports ADOX
 
Public Class AccessConnexion
 
    'attribut chemin de la base
    Private chemin As String = My.Application.Info.DirectoryPath & "\DataBase.accdb"
    'Attribut connexion unique à une source de données
    Private cnx As OleDb.OleDbConnection = Nothing
    'Attribut chaine de connection (fournisseur d'accès aux données + chemin)
    Private cnxstr As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & chemin & ";"
 
 
    'retourne vrai si le fichier (base) existe
    Public Function verif_chemin() As Boolean
        Return System.IO.File.Exists(chemin)
    End Function
 
    'créer la BD access
    Public Sub Create_base()
        Try
            Dim Cat As New Catalog
            Cat.Create(cnxstr)
        Catch ex As Exception
            Throw New Exception("Erreur création base" & Environment.NewLine & ex.Message)
        End Try
    End Sub
 
    Public Sub Create_table(ByVal sql As String)
        Dim Cmd = New OleDb.OleDbCommand
        Open_connexion()
        Cmd.Connection = cnx
        Cmd.CommandText = sql
        Cmd.ExecuteNonQuery()
        Close_connexion()
    End Sub
    Protected Function Open_connexion() As OleDb.OleDbConnection
        Try
            cnx = New OleDb.OleDbConnection
            'test si la connexion n'est pas déjà ouverte
            If cnx.State <> 1 Then
                cnx.ConnectionString = cnxstr
                cnx.Open()
            End If
        Catch ex As Exception
            Throw New Exception("Erreur d'ouverture connexion" & Environment.NewLine & ex.Message)
        End Try
        Return cnx
    End Function
 
    Protected Function Close_connexion() As OleDb.OleDbConnection
        Try
            'test si la connexion n'est pas déjà fermer
            If cnx.State <> 0 Then
                cnx.Close()
            End If
        Catch ex As Exception
            Throw New Exception("Erreur fermeture connexion" & Environment.NewLine & ex.Message)
        End Try
        Return cnx
    End Function
 
End Class
DAL : une classe utilisateur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
'ajout référence vers BEL
Imports BEL
 
Public Class AccessUsers : Inherits AccessConnexion
 
    Public Sub table_utilisateur()
        Create_table("CREATE TABLE UTILISATEUR (identifiant VARCHAR(10) NOT NULL PRIMARY KEY," & "mdp CHAR(10) NOT NULL," & "question VARCHAR(35) NOT NULL," & "reponse CHAR(10) NOT NULL)")
    End Sub
 
 
    'Enregistrement de l'utilisateur dans la base
    Public Sub Ajouter(ByVal NewUser As USER)
        Try
            Dim cnx As New OleDb.OleDbConnection
            Dim cmd As OleDb.OleDbCommand
            cnx = Open_connexion()
            cmd = New OleDb.OleDbCommand
            cmd.CommandType = CommandType.Text
            Dim sql As String = "INSERT INTO UTILISATEUR (identifiant, mdp, question, reponse) VALUES (@login, @password, @question, @reponse)"
            cmd.CommandText = sql
            cmd.Parameters.AddWithValue("@login", NewUser.Login)
            cmd.Parameters.AddWithValue("@password", NewUser.Password)
            cmd.Parameters.AddWithValue("@question", NewUser.Question)
            cmd.Parameters.AddWithValue("@reponse", NewUser.Reponse)
            cmd.Connection = cnx
            cmd.ExecuteNonQuery()
        Catch ex As Exception
            Throw New Exception("Erreur ajout utilisateur" & Environment.NewLine & ex.Message)
        End Try
    End Sub
 
End Class
BPL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
'ajout référence vers la BEL
Imports BEL
'ajout référence vers la DAL
Imports DAL
 
Public Class BPLuser
 
    'Envoie de l'objet metier à la DAL pour l'ajout de l'utilisateur
    Public Sub BPL_Ajouter(ByVal NewUser As USER)
        Dim UserDAL As New DAL.AccessUsers
        UserDAL.Ajouter(NewUser)
    End Sub
 
End Class
BEL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
Public Class USER
 
#Region "Attributs"
    Private User_login As String
    Private User_password As String
    Private User_question As String
    Private User_reponse As String
#End Region
 
#Region "Property"
 
    Public Property Login() As String
        Get
            Return User_login
        End Get
        Set(ByVal value As String)
            User_login = value
        End Set
    End Property
 
    Public Property Password() As String
        Get
            Return User_password
        End Get
        Set(ByVal value As String)
            User_password = value
        End Set
    End Property
 
    Public Property Question() As String
        Get
            Return User_question
        End Get
        Set(ByVal value As String)
            User_question = value
        End Set
    End Property
 
    Public Property Reponse() As String
        Get
            Return User_reponse
        End Get
        Set(ByVal value As String)
            User_reponse = value
        End Set
    End Property
 
#End Region
 
    Public Sub New(ByVal Login As String, ByVal Password As String, ByVal Question As String, ByVal Reponse As String)
        User_login = Login
        User_password = Password
        User_question = Question
        User_reponse = Reponse
    End Sub
 
 
End Class