2016-01-29 31 views
0

完成計算機科學學位後,我找到了一份軟件開發人員的工作(嗚!)。通過大學,我大量使用Web和Java編程(從程序的角度來看)。我現在也跳入Visual Basic .NET中的面向對象編程。通過類存儲和檢索 - 函數,子類和最佳實踐

我想從最佳做法的右腳開始,而不是如此我有一個簡單的場景我想知道什麼是最好的方法來做到這一點。

假設我有一個名爲'Config.vb'的類,它在創建'Sub Load'時從註冊表中讀取鍵。 關鍵字是:'Fname','Lname','address1','address2','city','shoesize'。

所以我想存儲這些鍵和它們的值可以訪問我的Main.vb。

第一種方法是申報6個變量對存儲的值,從而

Dim firstName = regKey("firstname").value 
Dim lastName = regKey("lastname").value... 

然後有存取方法來檢索這些值

Property ReadOnly getFirstname As String 
Get 
    Return firstName 
End Get 
End Property 

但寫出6種get方法似乎太冗長。我很可能是錯的,這就是我爲什麼要問的原因。這是訪問這些變量的最佳方式嗎?

另外,

我想也許聚攏在短短的一個解釋變量的所有鍵和值,因此將包含與他們的價值觀所有的鍵,然後只具有一個函數來接受密鑰字符串和返回值如下:

Private Function getkey(key) As String 
    Return dictionary.Item(key) 
End Function 

這可能是我如何接近它。

任何指導或讓我知道你做這件事的方式都會幫助我和其他人學得更好!

謝謝。

+3

如果你想要最佳實踐,不要將應用程序數據存儲到註冊表中。還有很多其他選項以My.Settings開頭 – Plutonix

+0

如果數據實際上類似Settings/Config,[此答案可能有幫助](http://stackoverflow.com/a/25319489/1070452)。 「showsize」推斷應用程序數據,如果沒有足夠的數據庫打擾,請參閱此答案(http://stackoverflow.com/a/33529974/1070452)(除了上下文之外,彼此非常相似) – Plutonix

+0

啊我明白了,謝謝你的幫助,我沒有意識到這是一種不好的做法!我想我現在要重寫課程! – MikeS

回答

2

正如Plutonix所說。將數據存儲在註冊表中不是一個好主意。取決於你想如何訪問數據。如果您只想一次性將所有關於(大概)人的所有數據讀入您的程序,那麼您可以查看object serialization,或者如果您正在處理大量數據,請查看數據庫。使用基本的OOP可以很好地開始被發現here。它的一篇很老的文章,但應該仍然工作得很好。

就您的數據而言,您最好定義一個新班級。像這樣

Friend Class Person 
    Dim _firstName As String 
    Dim _lastName As String 

    Public Property FirstName 
     Set(value) 
      _firstName = value 
     End Set 
     Get 
      Return _firstName 
     End Get 
    End Property 

    Public Property LastName 
     Set(value) 
      _lastName = value 
     End Set 
     Get 
      Return _lastName 
     End Get 
    End Property 
End Class 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 

    Dim p1 As New Person 
    p1.FirstName = regkey("firstname") 
    p1.LastName = regkey("lastname") 

End Sub 

當然,如果你與幾個人打交道,那麼你會更好地創建一個列表。而不是聲明P1作爲一個人的一個新的實例,decleare列表這樣

Dim peopleList As New List(Of Person) 

,並添加人列出此

Dim tempPerson As New Person 

    tempPerson.FirstName = regkey("firstname") 
    tempPerson.LastName = regkey("lastname") 
    peopleList.Add(tempPerson) 

tempPerson.FirstName = "Fred" 
    tempPerson.LastName = "Perry" 
    peopleList.Add(tempPerson) 

OOP的好處是,在一個類中,你可以聲明例如在類的每個實例中處理數據的方法(過程)。說你有你的類名爲DOB的屬性 - 列出此

Dim _DateOfBirth As Date 

Public Property DOB As Date 
    Set(value As Date) 
     _DateOfBirth = value 
    End Set 
    Get 
     Return _DateOfBirth 
    End Get 
End Property 

您可以創建這樣一個返回的人的年齡而不必存儲和更新的時代,隨着時間的推移類的功能。就像這樣:

Public Function Age() As Integer 
    Age = DateDiff(DateInterval.Year, _DateOfBirth, System.DateTime.Now) 
    Return Age 
End Function 

爲了得到tempperson的年齡,只是用這個

Dim tempPerson As New Person 
    tempPerson.FirstName = "Fred" 
    tempPerson.LastName = "Perry" 
    tempPerson.DOB = CDate("8/12/1967") 
    MessageBox.Show("Age of the person is " & tempPerson.Age) 

愛是愛OOP!

+0

真棒的答案,謝謝你進入這麼深的。我實際上是指保留這些數據的一個副本。真的很高興知道我是否在跟蹤多個人。 如果我要保留信息的一個副本,假設它是關於用戶的信息,是否更好的做法是讓所有私有變量通過多個Get Property方法訪問? – MikeS

+0

是的,我會這麼說。使用附件方法,您可以在其中包含代碼以在內部驗證數據,並且如果該類在其他地方曾經使用過,則內置驗證而不必再次編寫它,或者如果您決定更改驗證代碼,則只需要在一個地方做。而不是在兩個單獨的項目中 –

+0

您的'Age'函數不會在'Option Strict'下編譯。由於日期沒有格式(即轉換爲字符串),所以您只需'DateDiff(DateInterval.Year,_DateOfBirth,System.DateTime.Now)'。把它作爲一個函數來構造是很常見的,但是你可以看看大多數.NET類方法,比如'Count',它們類似於它們的ReadOnly屬性 – Plutonix