2015-11-05 177 views
-1

我是一个自学成才的程序员,在这种环境下我无时无刻都在检查最佳实践,但在这种情况下我不相信我在做什么是最好的做法,需要有人告诉我,否则如有必要。从另一个类别调用函数

我有我的主类,然后在主类中的SQLFunctions类,我显然做我的表格加载,我也填充一些数据表。

我有一个SQLFunctions类中的函数,它为我返回SQL到DataTable,工作正常。

我查询我声明这ReturnDataTable功能

Public Shared Function ReturnDataTable(ByVal SQL As String) 

现在,我相信这不是我应该做这样的方式,是这样吗?有没有另一种方法我应该从我的主类中的SQLFunctions类调用函数?

干杯

+0

你认为它有什么问题吗? – peterG

+0

那么我读了一些关于不使用'共享'变量的程序,因为它不会初始化它自己的'实例'。另外我不知道它是否对软件的性能有任何影响。它的好奇心真的。我正在学习,所以想知道它是否是最佳实践。 – Lynchie

+3

嗯,这不是一个变量。 IMO在共享类中拥有一组共享(静态C#)方法没有任何问题,可以通过您的程序使用。本质上你在这里工作的是数据访问层 - DAL - 这是一个非常主流的概念。另外,如果你是自学成才,并且还没有阅读“完成代码”,我建议你自己复印一份。 。 。 – peterG

回答

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方法或类没什么问题。