我是一个自学成才的程序员,在这种环境中,我无法随时检查最佳实践,但在这种情况下,我不相信我在做什么是最好的做法和如有必要,需要有人告诉我。
我有我的主类,然后是一个SQLFunctions类,在主类中我显然做了表单加载,我也填充了一些DataTables。
我在SQLFunctions类中有一个函数,它为我返回SQL到DataTable,工作正常。
我的查询是我将此ReturnDataTable函数声明为
Public Shared Function ReturnDataTable(ByVal SQL As String)
现在我确信这不是我应该这样做的方式,或者是它?还有另一种方法我应该从我的主类中调用SQLFunctions类中的函数吗?
干杯
答案 0 :(得分:0)
使用共享方法与实例方法有两个主要思路。
当您的班级没有州时使用共享,例如下面的伪代码:
' This is state-less object
Public Class UserDataAccess
' hide constructor to make sure no instance created
Private Sub New()
End Sub
Public Shared Function GeAlltUsers() As List(Of User)
' Get all users from DB
End Sub
Public Shared Function GetUser(id As Integer) As User
' Get single user from DB
End Sub
End Class
当你的类有状态时使用实例,例如下面的伪代码:
Public Class UserRepository
' private members represent state of the object
Private _dataProvider As IDataProvider ' Oracle? Sql Serv? MySql?
Private _users As List(Of User)
Public Sub New(dataProvider As MyDataProvider)
_dataProvider = dataProvider
End Sub
Public Shared Function GetUsers() As List(Of User)
If _users Is Nothing Then
LoadUsers() ' loads collection _users
End If
Return _users
End Sub
Public Shared Function GetUser(id As Integer) As User
If _users Is Nothing Then
LoadUsers() ' loads collection _users
End If
Return _users.FirstOrDefault(Function(u) u.Id = id) ' This is System.LINQ extention
End Sub
End Class
所以,答案是 - 如果不需要状态,shared
方法或类没有错。