2010-03-30 7 views
0

데이터베이스 결과를 가져와 UI를 채워야하는 3 계층 응용 프로그램이 있습니다. 메시지를 처리하는 MessagesCollection 클래스가 있습니다. 데이터베이스에서 내 사용자를로드합니다. 사용자 (즉, 새로운 User())의 인스턴스 생성시 MessageCollection Messages = new MessageCollection (this)이 수행됩니다. 메시지 수집은 사용자를 매개 변수로 허용합니다.컬렉션을 통한 데이터베이스 액세스

User user = user.LoadUser("bob"); 

Bob에게 메시지를 보내려고합니다.

user.Messages.GetUnreadMessages(); 

GetUnreadMessages 차례로 데이터 액세스 레이어를 호출 내 비즈니스 데이터 공급자를 호출합니다. 비즈니스 데이터 공급자는 목록을 반환합니다.

내 질문에 - 무엇이 가장 좋은 방법이 여기에 있는지 잘 모르겠다 - MessagesCollection 클래스 내의 배열에 메시지 모음이있는 경우 ICelection을 구현하여 GetEnumerator()를 제공하고 메시지를 트래버스 할 수 있습니다. 그러나 메시지가 변경되고 사용자에게 오래된 메시지가로드되면 어떻게됩니까?

큰 메시지 콜렉션은 어떻게됩니까? 내 사용자에게 읽지 않은 메시지가 10,000 개가 있다면 어떻게 될까요? 데이터베이스에 액세스하고 10,000 개의 Message 객체를 반환하는 것이 효율적이라고 생각하지 않습니다.

답변

0

사용자 후 메시지를로드하기 위해 별도로 전화를 걸면 DB에 2 왕복을가는 것으로 나타납니다. 가능하다면, 단일 여행을하고 단일 여행에서 메시지를 사용자에게 로딩하는 것을 고려할 것입니다. 많은 양의 데이터 측면에서, 어떤 종류의 페이징 메커니즘을 고려할 수 있습니다. 사용자가 단일보기에서 모든 메시지를 이해하는 것은 불가능하므로 한 번에 한 페이지 씩 표시하는 것이 바람직합니다.

컬렉션은 내부적으로 문제를 (이벤트 또는 기타) 변경 내용을 추적 할 수 있습니다. 사용자 정의 이벤트 또는 INotifyPropertyChanged 인터페이스와 같은 것을 사용하여 엔티티에 변경 사항을 노출 할 수 있습니다.