为SQL-Access实现工厂模式的最佳方法是什么?它应该很容易维护。
由于不同的表具有不同的列,我遇到了麻烦。
我在VB.NET中创建了一个新项目(Windows窗体),并将其命名为“#A; DBAccess"这样你就可以更容易地跟着我,而不是在这里粘贴我的休项目。
我工厂背后的想法是它根据枚举返回一个对象。将来,您可以根据需要轻松添加新类,只需在工厂中添加新的初始化。每当你打电话给" 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"例外情况,因为必须以不同的方式访问每个表。
我尝试过抽象类和接口,但是我没有达到预期的结果。
您如何解决这个问题?