2013-12-16 1 views
1

도움이 필요한 디자인 문제. 예를 들어 설명하는 것이 가장 좋습니다. 사용하여 다음과 같은 도메인 모델 : - 학생 - 등록 - 코스도메인 모델의 모델 디자인 다 대 다 관계

학생 및 코스가 등록 테이블에 의해 달성 서로 많은 관계로 많은이

는, 즉 등록은 StudentID (FK)와 CourseID있다 (FK). Student 클래스와 Course 클래스에는 각각 네비게이션 속성, 즉 다른 클래스의 ICollection이 있습니다.

저는 View 모델을 사용하고 있으며 간단한 CRUD 기능을 사용하여 학생과 코스를 추가, 편집, 삭제합니다. View 모델은 관련 Domain 모델과 매우 유사합니다.

학생의 세부 정보를 표시하는 것은 간단하지만 학생의 코스 세부 정보를 표시하는 데있어 가장 적합한 방법은 다음 중 무엇입니까?

  1. 학생보기 모델에서 등록 도메인 모델의 ICollection을 선언 하시겠습니까? 그런 다음보기에서 등록 세부 사항에 액세스 할 수 있습니다. View 모델이 얻으려고하는 것을 취소하고, 도메인 모델에서 추상화 레이어를 갖는 것처럼 느껴집니다. 이 디자인을 사용하여 등록 도메인 모델은 학생보기 모델을 통해보기에서 액세스 할 수 있습니다.

  2. 등록 클래스의보기 모델을 만듭니다. 도메인 모델과 동일합니다. 보기 모델에서 도메인 모델의 값을 보유하는 다른 작업은 수행하지 않습니다. AutoMapper를 통해 매핑되어야합니다. 이 옵션을 어떻게 만들지 모르겠지만 비효율적입니다.

답변

2

우선 Enrollment은 도메인 모델이 아니어야합니다. EnrollmentStudent에서 Course으로 다 대다 관계를 지정하는 데이터베이스 테이블입니다.

나의 제안은 다음 매핑에서 다 대다 관계를 만들 Student 도메인 모델에 ListCourse의의를 생성하고 StudentCourse를 매핑 NHibernate 또는 Fluent NHibernate을 사용하는 것입니다 그리고 당신은 간단하게 검색 할 수 있습니다 Student 인스턴스의 Course입니다.

또한 코드에 SQL 문을 작성하는 대신 매핑을 사용할 때 계단식 작업을보다 자유롭게 사용할 수 있습니다.

+0

예, 좋은 지적입니다. 감사합니다. 왜 내가 등록보기 모델을 필요로하지 않는지 알 겠어. 또한 Entity Framework를 사용하고 있으며 Navigation Properties 및 Fluent API에 대해 올바르게 읽었습니다. 외부 키 연결 (클래스에서 FK를 통해)과 독립 연결 (탐색 속성을 통해)을 만드는 방법을 설명합니다. –

+0

등록 테이블에 코스 레코드와 관련된 열이 포함 된 경우 등록보기 모델이 필요합니까? 예를 들어, 코스 테이블에는 정적 데이터가 들어 있습니다. 코스 A, 코스 B ... 코스의 성인용 버전 또는 노인 버전을 사용하는 학생들에게 등록 테이블에 CourseTypeAdultOrSenior 컬럼을 추가했는지 추적하고 싶었습니다. –

+0

@ThomasVeil이 경우,'Enrollment' 테이블을 도메인 모델에도 매핑 할 것입니다. EF에서 매핑을 수행하는 방법을 보려면 [이 대답] (http://stackoverflow.com/a/5543702/1831275)을 확인하십시오. – albusshin