thomasaurelien
Messages postés71Date d'inscriptionjeudi 7 juillet 2011StatutMembreDernière intervention27 novembre 2017
-
21 avril 2012 à 13:19
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024
-
21 avril 2012 à 16:49
Bonjour je viens de me mettre à la programmation multi-couche en vb.net et ado.net je pense avoir compris les liens entre chaque couche mais c'est la construction des classes qui me posent problème.
J'ai 4 couche : IHM (interface homme - machine), DAL (accès aux données), BEL (objet métier) et BPL (règle de gestion, appel des fonctions du DAL)
J'ai une table Access nommé User, j'ai donc crée mon interface pour en ajouter un enregistrement (IHM).
Public Class Inscription
Private Sub Binscription_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Binscription.Click
'vide
End Sub
End Class
DAL, une classe pour la connexion :
' Ajout référence : Microsoft ADO Ext. 2.8 for DDL and Security
Public Class AccessConnexion
'attribut chemin de la base
Private chemin As String
'Attribut connexion unique à une source de données
Private cnx As OleDb.OleDbConnection
'Attribut chaine de connection (fournisseur d'accès aux données + chemin)
Private cnxstr As String
'retourne vrai si le fichier (base) existe
Public Function verif_chemin() As Boolean
Return System.IO.File.Exists(chemin)
End Function
Public Sub Initialise_connexion()
chemin = My.Application.Info.DirectoryPath & "\Data_base.accdb"
cnxstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & chemin & ";"
End Sub
Public Sub Create_base()
'base de donnée
Dim db As New ADOX.Catalog
Try
db.Create(cnxstr)
Catch ex As Exception
Throw New Exception("Erreur de création de la base" & Environment.NewLine & ex.Message)
End Try
End Sub
Protected Sub Open_connexion()
Try
'test si la connexion n'est pas déjà ouverte
If cnx.State <> 1 Then
cnx = New OleDb.OleDbConnection
cnx.ConnectionString = cnxstr
cnx.Open()
End If
Catch ex As Exception
Throw New Exception("Erreur d'ouverture connexion" & Environment.NewLine & ex.Message)
End Try
End Sub
Protected Sub Close_connexion()
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
End Sub
End Class
une autre pour la table User (c'est la que je bloque un peu beaucoup) je ne vois pas trop comment je dois organisé cela
Public Class AccessUsers
'vide
End Class
BEL, instanciation des objet
Public Class USERS
#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
et la couche BPL, celle-ci est vide pour l'instant mais je vois comment elle fonctionne (appel de fonction de la classe AccessUser dans DAL)
Donc en faite ma principale question serait comment mettre en forme la classe AccessUser de la DAL ?
thomasaurelien
Messages postés71Date d'inscriptionjeudi 7 juillet 2011StatutMembreDernière intervention27 novembre 2017 21 avril 2012 à 14:19
quelque changement :
IHM
'ajout référence vers BEL
Imports BEL
'ajout référence vers BEL
Imports BPL
Public Class Inscription
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
AjouterUser(TBlogin.Text, TBpassword.Text, CBquestion.SelectedText, TBlogin.Text)
End Sub
End Class
BPL
'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
Mais se qui me manque c'est toujours comment mettre en place ma classe AccessUser dans la DAL
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 21 avril 2012 à 16:49
Bonjour,
Ta question demande réflexion (dans le sens réfléchir, pas la Reflection de NET ;) ).
Ton soucis est clair, voici quelques idées :
- Une classe "singleton" (Design pattern) permettant l'accès à la base de données, cette classe s'initialise et se détruit toute seule.
- Cette classe listera un certains nombre d'objet enfant représentant les objets logiques (Utilisateur, ...). Ces objets hériteront ou implémenteront une interface/classe afin de rendre leur accès générique si besoin. Ils auront des méthodes d'ajout/suppression/modification et lecture, utilisant une ou plusieurs classes pour représenter les données extraites.
- Les élément d'IHM nécessitant un accès à la base de données accèderont à la base de données via son singleton et récupèreront les données via les objet mis à disposition.
Exemple :
Dim MonUtilisateur As ClsUser=New ClsUser(Nom,Prenom, ...)
Il y a la possibilité des génériques aussi pour la classe/interface mère des objets d'accès.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
Mon site