使用可重复的公共代码扩展 class 函数
Extend class functions with repeatable common code
我使用 Dapper
访问我的数据,按照下面的代码。只有两个功能,但真正的代码可以有 hundredreads。我想登录一个特定的数据库 table 所有执行的 SQL 语句。这应该在所有 DataRepository class 函数中通用。
实现此类功能以避免在 SelectCustomers
、SelectEmployees
等每个函数中重复的最佳方法是什么?请分享一个例子。
Public Class BaseRepository
Protected Shared Function OpenConnection() As IDbConnection
Dim connection As IDbConnection
connection = New SqlConnection(MyAppSettings.PascomDB)
connection.Open()
Return connection
End Function
End Class
Public Class DataRepository
Inherits BaseRepository
Public Function SelectCustomers() As IEnumerable(Of Customers)
Using connection As IDbConnection = OpenConnection()
Dim query As String = "SELECT * FROM Customers"
Return connection.Query(Of Customers)(query)
connection.Close()
End Using
End Function
Public Function SelectEmployees() As IEnumerable(Of Employees)
Using connection As IDbConnection = OpenConnection()
Dim query As String = "SELECT * FROM Employees"
Return connection.Query(Of Employees)(query)
connection.Close()
End Using
End Function
End Class
您可以保持简单,只需向基础添加一个方法 class:
Public Class BaseRepository
' ...
Protected Shared Function LogAndQuery(Of T)(query As String) As IEnumerable(Of T)
Using connection As IDbConnection = OpenConnection()
' TODO: add logging of the query here
Return connection.Query(Of T)(query)
' connection.Close() - note, this is unreachable code, but it's being disposed anyway
End Using
End Function
End Class
并在您的存储库方法中使用它:
Public Function SelectCustomers() As IEnumerable(Of Customers)
Dim query As String = "SELECT * FROM Customers"
Return LogAndQuery(Of Customers)(query)
End Function
我使用 Dapper
访问我的数据,按照下面的代码。只有两个功能,但真正的代码可以有 hundredreads。我想登录一个特定的数据库 table 所有执行的 SQL 语句。这应该在所有 DataRepository class 函数中通用。
实现此类功能以避免在 SelectCustomers
、SelectEmployees
等每个函数中重复的最佳方法是什么?请分享一个例子。
Public Class BaseRepository
Protected Shared Function OpenConnection() As IDbConnection
Dim connection As IDbConnection
connection = New SqlConnection(MyAppSettings.PascomDB)
connection.Open()
Return connection
End Function
End Class
Public Class DataRepository
Inherits BaseRepository
Public Function SelectCustomers() As IEnumerable(Of Customers)
Using connection As IDbConnection = OpenConnection()
Dim query As String = "SELECT * FROM Customers"
Return connection.Query(Of Customers)(query)
connection.Close()
End Using
End Function
Public Function SelectEmployees() As IEnumerable(Of Employees)
Using connection As IDbConnection = OpenConnection()
Dim query As String = "SELECT * FROM Employees"
Return connection.Query(Of Employees)(query)
connection.Close()
End Using
End Function
End Class
您可以保持简单,只需向基础添加一个方法 class:
Public Class BaseRepository
' ...
Protected Shared Function LogAndQuery(Of T)(query As String) As IEnumerable(Of T)
Using connection As IDbConnection = OpenConnection()
' TODO: add logging of the query here
Return connection.Query(Of T)(query)
' connection.Close() - note, this is unreachable code, but it's being disposed anyway
End Using
End Function
End Class
并在您的存储库方法中使用它:
Public Function SelectCustomers() As IEnumerable(Of Customers)
Dim query As String = "SELECT * FROM Customers"
Return LogAndQuery(Of Customers)(query)
End Function