2009-08-24 2 views
0

참고 : WinForms C# Early Learning Level!디자인 : 부모를 피하면서 어린이 컬렉션에 액세스하십시오!

C# 개체 환경에서 상황을 구현하는 가장 좋은 방법에 대한 도움이 필요합니다. 아직 코드가 존재하지 않기 때문에 코드를 게시 할 수 없지만 대안을 제공 할 수 있습니다.

간단히 말해서 (내가 어떻게 작동하는지 알기 때문에) Book 클래스가 있습니다. 나는이 책 클래스의 모음집 (<List>)을 가지고있다. 각 도서 클래스 내에서 장 (Chapter) 클래스 모음집 (<List>)이 있습니다. Class Class와 Chapter 클래스는 전혀 다른 추상 클래스를 기반으로합니다. 이러한 요소는 별도의 비즈니스 계층에서 정의되며 데이터는 데이터 소스 계층에서로드됩니다. 많은 책과 많은 장이 있음을 명심하십시오.

내 GUI 레이어에서 책을 검색 할 수 있으며 컬렉션 색인/키를 기반으로하는 기본 속성입니다. Book 클래스를 통해 책 내의 모든 장을 가져올 수도 있습니다.

내가해야할 일은 모든 책에서 장부 클래스를 가져올 수 있고 장부 클래스를 거치지 않고도 가능합니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

감사합니다 남자와 여자들

답변

2

당신은 "GET"무엇을 의미합니까. 모든 챕터를 기억하고 싶습니까? 아니면 데이터베이스를 검색하고 있습니까?

챕터를 식별하는 정보는 무엇입니까?

모든 챕터 (또는 챕터의 전체 텍스트가 아닌 경우 챕터 설명자)가 메모리에 있다고 가정 해 봅시다. ChapterIdentity (아마도 BookId + ChapterNumber)에 의해 키 모음이 있습니다. 당신이 컬렉션에 모든 장을 추가 할 필요가 책을 추가 할 때

은 그럼 그냥

ChapterCollection.getById(aChapterId); 

입니다.

이 가능성이 더 높습니다. 따라서 ID로 챕터를 검색 할 수있는 기능이 필요합니다. 그 모든 것은 당신이 끈기를 어떻게 지키 느냐에 달려 있지만 개념은 리트리버의 입장에서 볼 때 메모리 내보기와 똑같이 보일 수 있습니다.

+0

'get'은 메모리에서 챕터에 대한 참조를 검색하고 검색하는 것을 의미하며 모든 딕셔너리에 대해 db를 쿼리하는 데 사용할 수 있습니다. 챕터에는 제목과 함께 고유 한 ID가 있습니다. 책에서 챕터의 계층 적 관계를 유지하는 대신 책과 챕터를 별도로 보관하고 연결하는 것이 좋습니다. –

+0

계층 적 관계와 "모든 챕터"컬렉션을 모두 가질 수 있습니다. 객체 모델을 통해 여러 액세스 경로를 갖는 것이 합리적입니다. 그러나, 나는 추측 할 수있는 의회의 Libraray를 위해 작동하지 않을 것입니다. 그래서 getById()를 제공하는 서비스 api가 whetehr을 숨길 수 있거나 모든 것이 기억에 남지 않을 수 있습니다. 필요한 경우 데이터베이스 검색을 수행하십시오. – djna

1

왜 책 수업을 듣고 싶지 않으세요? 실제로는 책 클래스 개체의 목록을 검색하거나 모든 책의 모든 장이 들어있는 보조 컬렉션 개체를 유지 관리하는 두 가지 옵션 만 사용할 수 있습니다. 챕터 클래스의 속성으로 검색 할 특정 키가 있다고 가정합니다. 그렇다면 사전 검색 (키, 챕터)을 사용하여 검색 속도를 높이거나 목록 (챕터)을 유지하고 LINQ를 사용하여 검색 할 수 있습니다. 검색 대상과 책 클래스를 피하는 이유에 따라 다릅니다.

+0

두 번째 컬렉션 옵션은 내가 생각해 낼 수있는 유일한 방법이었으며 더 좋은 방법이 될 것으로 보였습니다. –

0

책 클래스를 사용하지 않는 경우 모든 장 개체에 대한 참조를 포함하는 "라이브러리"컬렉션이 있어야합니다.