programmation multi-couche vb.net
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:
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:
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:
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:
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:
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:
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 |