2009-12-06 38 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的,或者自己创建一个。这是从数据库中获取数据的抽象。你的问题的

第二部分: 如果你从数据库中读取,最好的做法是需要的,只要检索不是时间敏感,需要很长的时间,只有当读取数据。如果需要多次读取相同的数据,最好在需要时读取一次并缓存它。