Bonjour à tous,
J'aurais besoin de quelques conseils pour une bonne conception des couches et de leurs accès avec Linq To Sql en tant que couche DAL
Nous implémentons, dans notre projet actuel, Linq To Sql en tant que DAL. Il est clair que nous ne ferons quasiment pas de ORM autre que 1:1 (à part 1 ou 2 exeptions).
Les références sont les suivantes (classique de chez classique):
- La couche Factory connait la couche BO
- La couche BO connait la couche DAL mais pas la Factory
- La couche DAL ne connait personne
Avant de travailler avec Linq, j'avais dans ma DAL des objets DTO qui étaient créer en BO et envoyer aux méthodes d'insertion DB de la couche DAL. Ce qui me garantissait une clareté au niveau de mon code.
Tout ce qui touchait à l'insertion et extraction des données se trouvaient dans la DAL. Ma couche BO était donc "propre" de ce genre d'opération.
Mais maintenant que nous travaillons avec Linq To Sql, les choses se présentent de manière moins clair et moins "propre".
Pour expliquer mon cas, voici un exemple d'insertion d'un client
En BO
En DAL
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 Public Class Client .... Public Shared Sub ChargerListeClient() Try For Each r In DAL.DALClient.getListeClients Dim oClt As Client = New BO.Client(r.Id_Client, r.Nom) listeClients.Add(oClt) Next Catch ex As Exception Throw ex End Try End Sub Public Shared Sub InsertNouveauClient(ByVal oClt As Client) Try Dim ctx As DAL.modeleMGTDataContext = New DAL.modeleMGTDataContext Dim _dalClient As DAL.Client = New DAL.Client _dalClient.Nom = oClt.Nom _dalClient.Prenom = oClt.Prenom ctx.SubmitChanges() Catch ex As Exception Throw ex End Try End Sub .... End Class
Vouc pouvez constater que lors d'un rappatriement de données, on peut respecter la référence des couches grâce à la collection IQueryable(Of .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Public Class DALClient .... Public Shared Function getListeClients() As IQueryable(Of Client) Dim ctx As modeleMGTDataContext = New modeleMGTDataContext Dim query = From c In ctx.Clients _ Select c Return query End Function .... End Class
Par contre pour l'insertion, je suis obligé de réaliser cette opération dans ma BO.
En travaillant de cette manière, je transforme ma couche BO comme étant également impactée par les problèmatiques d'accès aux données alors que cela ne devrait pas la concerner.
J'espère avoir été clair dans mes explications.
Quels sont vos conseils et expériences sur la chose.
Partager