2009-12-06 39 views
0

我正在嘗試用對象重寫現有系統。我已經創建了一些基本對象,但我堅持如何讓他們按照我的想法工作。嵌套對象和檢索數據的位置?

這些是基本類:

Public Class Course 
    Public AcadPeriod As String 
    Public AoSCode As String 
    Public AoSPeriod As String 
    Public Title As String 

    Public Reviews As New Reviews 
End Class 

Public Class Courses 
    Inherits CollectionBase 

    Public Sub Add(ByVal cse As Course) 
     List.Add(cse) 
    End Sub 
End Class 

Public Class Review 
    Public ReviewID As String 

    Public Categories As Categories 
End Class 

Public Class Reviews 
    Inherits CollectionBase 

    Public Sub Add(ByVal rev As Review) 
     List.Add(rev) 
    End Sub 
End Class 

Public Class Category 
    Public CategoryID As String 
    Public CategoryName As String 
    Public Comment As String 
    Public MeasureValue As Integer 
    Public CompletedBy As String 
    Public CompletedDate As DateTime 
End Class 

Public Class Categories 
    Inherits CollectionBase 

    Public Sub Add(ByVal cat As Category) 
     List.Add(cat) 
    End Sub 
End Class 

我希望能夠做的就是像下面寫代碼:

課程([CourseCode])評論(1).Categories( [CategoryID])。評論 或 課程(i).Reviews(1).Categories(x).Comment

[和]之間的字符表示來自調用應用程序的某些值。

我的問題的第二部分與檢索數據的最佳方式有關。在實例化時,我是否可以自動檢索對象內部檢索的所有日期(可能需要檢索相當多的數據),或者有像GetReviews(在Course對象內)或GetComments(在Review對象內)這樣的方法,在這些對象變爲可用之前調用? 這些方法是否應該簡單地在父對象中填入這些對象,或直接將對象返回給調用應用程序?

但是,我想要檢索課程對象作爲一些觀點。對我來說,在Course對象本身中使用這種方法似乎是錯誤的。 (Courses.GetCourses([StaffMember]))

我真的只是試圖進入編程OO,因爲我已經以非常程序化的方式使用.Net直到現在。是否有任何人都可以推薦的書籍作爲如何使用面向對象的指南以及根據手邊的任務使用它的不同方式? 我在過去創造了許多課程,這些課程對我來說一直很好,但我努力研究如何以儘可能最好的方式將它們放在一起。

回答

0

解決這個問題的另一種方法是讓每個類「擁有」或「包含」其他類。這被稱爲面向對象術語中的組合或聚合,我認爲它是一種更有效的設計。然而,你會寫這個來讀取數據:

Courses.GetCourse([CourseCode])。Reviews.GetReview(1).Categories.GetCategory([CategoryID])。評論

的類應該是這樣的:

Public Class Courses 
    Public Courses As Dictionary(Of String,Courses)() 
    Public Sub New() 
     'Load your courses into Me.Courses here 
    End Sub 
    Public Function GetCourse(CourseCode As String) As Course 
     Return Me.Courses(CourseCode) 
    End Function 
End Class 
+0

謝謝您的回答說唱,我認爲這兩種方法的結合將是完美的,我的問題。 我已經標記你爲答案,非常感謝。 – hermiod 2009-12-06 19:30:33

1

你的問題的第一部分: 是的,你可以做到這一點,是的,你可能應該爲了讓你的課程抽象化。我喜歡你要的模式。你要做的是讓這些類有一個接收密鑰的構造函數。它看起來是這樣的:

Public Class Course 
    Public AcadPeriod As String 
    Public AoSCode As String 
    Public AoSPeriod As String 
    Public Title As String 

    Public Reviews As New Reviews() 

    Public Sub New(CourseCode As String) 
     Dim myORM = New TheORM() 
     Me.AcadPeriod = myORM.GetAcadPeriod(CourseCode) 
     Me.AoSCode = myORM.GetAoSCode(CourseCode) 
     ' And so forth for all the properties 
    End Sub 
End Class 

...其中「表示定理」是你的對象關係經理,像LINQ到SQL或實體框架或NHibernate的,或者自己創建一個。這是從數據庫中獲取數據的抽象。你的問題的

第二部分: 如果你從數據庫中讀取,最好的做法是需要的,只要檢索不是時間敏感,需要很長的時間,只有當讀取數據。如果需要多次讀取相同的數據,最好在需要時讀取一次並緩存它。