VB.NET SQL工厂模式

时间:2016-05-10 15:35:05

标签: c# sql-server vb.net design-patterns

为SQL-Access实现工厂模式的最佳方法是什么?它应该很容易维护。

由于不同的表具有不同的列,我遇到了麻烦。

我在VB.NET中创建了一个新项目(Windows窗体),并将其命名为“#A; DBAccess"这样你就可以更容易地跟着我,而不是在这里粘贴我的休项目。

  • 我添加了一个新项目(文件夹),并将其命名为" DBAccess"
  • 我添加了一个新项目(模块)并将其命名为" DBAccessFactory"
  • 我添加了一个新项目(Class)并将其称为" DBAccessData"
  • 我添加了一个新项目(Class)并将其称为" DBAccessUser"
  • 我添加了一个新项目(代码文件)并将其称为" IDBAccess"

我工厂背后的想法是它根据枚举返回一个对象。将来,您可以根据需要轻松添加新类,只需在工厂中添加新的初始化。每当你打电话给" GetDBAccess"我执行" setConnectionString"方法,以便如果在功能中某些内容随连接字符串发生变化,您只需要在一个地方更改它。

my @fields = split(/\Q|\E/, $line);

我的DBAccessUser看起来与此类似。

这个想法是,无论何时检索对象,连接字符串始终都是相同的,以创建SQL连接。如果您需要更改它,请转到工厂类。

my $output_line = join(',', @fields);

我的DBAccessData看起来与此类似。

Public Module DBAccessFactory

    Private _connectionString As String = ""

    Public Enum DatabaseTable
        Data = 0
        User = 1
    End Enum

    Function GetDBAccess(table As DatabaseTable) As IDBAccess
        Try
            Dim dbAccessor As IDBAccess = Nothing

            setConnectionString()

            ' Get the correct DBAccessor for the table depending on the Enum
            Select Case table
                Case DatabaseTable.Data
                    dbAccessor = New DBAccessData(DBAccessFactory._connectionString)
                Case DatabaseTable.User
                    dbAccessor = New DBAccessUser(DBAccessFactory._connectionString)
            End Select

            ' Return an object that can access the table in our database
            Return dbAccessor

        Catch ex As Exception
            LogManager.handleExceptionDefault(ex)
            Return Nothing
        End Try
    End Function

    Private Sub setConnectionString()
#If DEBUG Then
        DBAccessFactory._connectionString = My.MySettings.Default.ConnectionTESTDB
#Else
        DBAccessFactory._connectionString = My.MySettings.Default.ConnectionLIVEDB
#End If
    End Sub
End Module

这两个类都实现了与此类似的接口

Public Class DBAccessUser : Implements IDBAccess

    Private _connectionString As String

    Sub New(connectionString As String)
        _connectionString = connectionString
    End Sub

    Public Function GetExportedDates() As Date() Implements IDBAccess.GetExportedDates
        Throw New NotImplementedException()
    End Function

    Public Function GetUser() As Object Implements IDBAccess.GetUser
        Dim user As New Object ' Userobject

        ' SELECT * FROM USER
        ' user.add(Name)
        ' user.add(E-Mail)
        Return user
    End Function
End Class

现在我可以在我的客户端

中执行此操作
Public Class DBAccessData : Implements IDBAccess

    Private _connectionString As String

    Sub New(connectionString As String)
        _connectionString = connectionString
    End Sub

    Public Function GetExportedDates() As Date() Implements IDBAccess.GetExportedDates
        Dim exportDates(5) As Date

        ' SELECT ExportedDates FROM Data
        ' exportDates(0 .. N) = Some Date
        Return exportDates
    End Function

    Public Function GetUser() As Object Implements IDBAccess.GetUser
        Throw New NotImplementedException()
    End Function
End Class

1)最大的问题是我有大约20个表,每个表看起来不同 2)当我继续这样做时,我必须添加越来越多的" NotImplemented"例外情况,因为必须以不同的方式访问每个表。

我尝试过抽象类和接口,但是我没有达到预期的结果。

您如何解决这个问题?

0 个答案:

没有答案