2009-12-06 6 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 ([카테고리 ID). 과정 또는 주석 (I) .Reviews (1) .Categories (X) 사이 .Comment

문자 [및] 호출 애플리케이션으로부터 오는 것 어떤 값을 나타낸다.

제 질문의 두 번째 부분은 데이터를 검색하는 가장 좋은 방법과 관련이 있습니다. 인스턴스화시 객체에 의해 내부적으로 검색된 모든 날짜 (검색 할 데이터가 많을 수 있음) 또는 응용 프로그램에있는 GetReviews (Course 객체 내에서) 또는 GetComments (Review 객체 내에서)와 같은 메소드가 있어야합니까? 이 객체를 사용할 수있게되기 전에 전화할까요? 이 메서드는 부모 개체 내에 이러한 개체를 채우거나 개체를 호출 응용 프로그램에 직접 반환해야합니까?

그러나 코스 개체를 일부 지점으로 검색하려고합니다. 나에게 코스 객체 자체에이 방법을 사용하는 것은 잘못된 것처럼 보인다. (Courses.GetCourses ([StaffMember]))

지금까지 매우 절차적인 방식으로 .NET을 사용 했으므로 이제는 OO 프로그래밍에 착수하려고합니다. 누구나 추천 할 수있는 책이 있습니까? OO를 사용하는 방법과 현재 진행중인 작업에 따라 다양한 방법으로 사용하는 방법에 대한 가이드가 있습니까? 나는 항상 나를 위해 꽤 잘 작동했던 과거의 많은 수업을 만들었지 만, 나는 가능한 한 최선의 방법으로 그들을 모두 모으는 방법을 연구하는 데 어려움을 겪고있다.

답변

0

이 문제를 해결하는 또 다른 방법은 각 클래스를 다른 클래스에 "포함"또는 "포함"시키는 것입니다. 이것은 OO 용어로 구성 또는 집계라고하며보다 효율적인 설계라고 생각합니다. 그러나 데이터를 읽으려면 다음을 작성하십시오.

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

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 

... 여기서 "TheORM는"Linq에 - 투 - SQL 또는 엔티티 프레임 워크 또는 NHibernate에 또는 당신이 직접 만든 같은 개체 관계형 관리자입니다. 그것은 데이터베이스에서 데이터를 가져 오는 추상화입니다.

질문의 두 번째 부분 : 데이터베이스에서 읽는 경우 검색이 시간에 민감하지 않고 오랜 시간이 걸리는 한 필요할 때만 데이터를 읽는 것이 가장 좋습니다. 동일한 데이터를 여러 번 읽어야 할 경우 필요할 때 한 번 읽고 캐시하는 것이 좋습니다.