2015-11-05 176 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方法或類沒什麼問題。