Как смоделировать OleDbDataAdapter (запрос, connStr) - PullRequest
2 голосов
/ 06 марта 2020

Как я могу издеваться над OleDbDataAdapter (query, conn) в функции FilledDataInDataTable? Могу я? Я понятия не имею, как мне поступить с зависимостью от параметров запроса и строки подключения.

Public Class DataTableOfDataFromExportCSV

   Private _adp As IOleDbDataAdapter

   Public Sub New(iadp As IOleDbDataAdapter)
       _adp = iadp
   End Sub

   Public Function FilledDataInDataTable(query As String, conStr As String) As DataTable

     Dim dt As New DataTable
     Dim adp = _adp.OleDbDataAdapter(query, conStr)
     adp.Fill(dt)

     Return dt

  End Function

End Class

Реализация

Public Class MyOleDbDataAdapter
 Implements IOleDbDataAdapter

 Public Function OleDbDataAdapter(query As String, conn As String) As OleDbDataAdapter Implements IOleDbDataAdapter.OleDbDataAdapter
    Dim adp As New OleDbDataAdapter(query, conn)
    Return adp

 End Function
End Class

Мой интерфейс

Public Interface IOleDbDataAdapter
   Function OleDbDataAdapter(query As String, conn As String) As OleDbDataAdapter
End Interface

1 Ответ

3 голосов
/ 06 марта 2020

Как я могу издеваться над OleDbDataAdapter

Вы не можете, потому что это NotInheritable (sealed - c#).

Public NotInheritable Class OleDbDataAdapter
Inherits DbDataAdapter
Implements ICloneable

Что у нас здесь есть Leaky Abstraction .

Предоставьте только то, что явно необходимо для выполнения желаемой функции.

Например,

Public Interface IOleDbDataAdapter
   Function Fill(query As String, dataTable As DataTable) As Integer
End Interface

Таким образом, детали / проблемы реализации, такие как OleDbDataAdapter, не будут вызывать тесную связь .

Public Class DataTableOfDataFromExportCSV

    Private adp As IOleDbDataAdapter

    Public Sub New(iadp As IOleDbDataAdapter)
        adp = iadp
    End Sub

    Public Function FilledDataInDataTable(query As String) As DataTable
        Dim dt As New DataTable
        adp.Fill(query, dt)
        Return dt
    End Function

End Class

Обратите внимание на удаление данных времени выполнения, которыми можно управлять в композиции root при построении графов объектов ваших компонентов или после того, как компонент уже был создан.

...