반복 가능한 공통 코드로 클래스 함수 확장

aop dapper logging oop vb.net

문제

아래 코드에 따라 Dapper 를 사용하여 데이터에 액세스합니다. 함수는 두 가지지만 실제 코드는 hundread를 가질 수 있습니다. 모든 실행 된 SQL 문을 특정 데이터베이스 테이블에 로그인하고 싶습니다. 이것은 모든 DataRepository 클래스 함수에서 보편적이어야합니다.

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

수락 된 답변

간단하게 유지하고 기본 클래스에 메서드를 추가하면됩니다.

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


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow