2016-11-22 3 views
0

Ich verwende Dapper, um auf meine Daten zuzugreifen, wie unten beschrieben. Es gibt nur zwei Funktionen, aber echter Code kann Hundreads haben. Ich möchte eine bestimmte Datenbanktabelle alle ausgeführten SQL-Anweisungen anmelden. Dies sollte für alle DataRepository-Klassenfunktionen gelten.Erweitern Sie Klassenfunktionen mit wiederholbarem gemeinsamen Code

Was ist der beste Weg, um solche Funktionen zu implementieren, um zu vermeiden, es innerhalb jeder einzelnen Funktion wie SelectCustomers, SelectEmployees, etc. zu wiederholen? Bitte teilen Sie ein Beispiel.

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 
+0

Ich glaube, Sie suchen in sein sollte Aspektorientierte Programmierung. – plalx

Antwort

1

Sie konnten es einfach halten und nur eine Methode der Basisklasse hinzu:

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 

und verwenden, die in Ihrem Repository Methoden:

Public Function SelectCustomers() As IEnumerable(Of Customers) 
    Dim query As String = "SELECT * FROM Customers" 
    Return LogAndQuery(Of Customers)(query) 
End Function 
Verwandte Themen