2010-04-27 3 views
1

나는 조언이 필요한 시나리오가 있습니다. 나는 학생과 교사의 두 종류의 사용자가있는 곳에 신청서를 가지고있다. 학생과 교사는 이름, 성, 이메일, 사용자 이름, 비밀번호 등의 공통 속성 중 일부를 공유합니다. 이러한 이유로 저는 학생으로부터 학생과 교사의 수업을받습니다.도메인 기반 디자인 질문

지금 문제는 사용자가 학생이나 교사 인 경우 실제로 그 사실을 모르는 경우가 있다는 것입니다. 사용자 지정 멤버 자격 공급자를 구현할 때와 GetUser 함수 에서처럼 GetUser는 userName을 사용하지만 이제는 반환해야하는 것을 잃어 버렸습니다.

학생용으로 나는 교사용으로 IStudent와 ITeacher를 만들었습니다. 그러나 때로는 나는 단지 사용자를 돌려주고 싶어하고 그가 학생인지 교사인지 상관하지 않습니다. 하지만 기본 클래스를 반환하는 것은 좋은 생각처럼 보이지 않습니다.

UPDATE :

나는 사용자를 반환하는 것이 좋습니다 심지어 학생 및 교사용 수업을 생각하지 않는다. 학생과 교사는 단순히 역할이며 StudentServices 및 TeacherServices에서 관리 할 수 ​​있습니다.

+0

사용자 유형이 잘못된 객체를 반환하는 이유는 무엇입니까? 이것은 논리적 인 해결책처럼 보입니다 - 특히 getUser() 호출의 경우; – quoo

+0

그리고 당신의 질문은 ??? – Oded

+0

업데이트 된 질문보기 – azamsharp

답변

1

고전적인 시나리오와 고전적인 가출 문제. 그렇습니다. 제약을 받으면 상속을 위해 일하는 것이 언제나 고통 스럽습니다. 그러나 혜택은 당신이 당신의 수업 (들)에 행동을 주입 할 때 발생합니다. 이제는 User 클래스를 사용하여 진부한 것을 결정하고 User 클래스를 Teacher 및 Student 클래스의 기본 및 하위 클래스로 사용하지 않는 것처럼 보입니다. 선생님과 학생을 역할로 삼아 별도의 서비스로 처리하면 좋은 생각이 될 수 있습니다. 제 생각에는 냄새가납니다. 둘 다 사용자 논리를 처리해야하므로이 서비스에서 중복 코드가 발생할 가능성이 높습니다.

실제로 서비스 레이어를 보완하여 이러한 어려움을 피하려면 도메인 레이어에서 GUI 또는 서비스 레이어로 로직이 누출되는 빈혈 도메인 모델로가는 길입니다. 교사와 학생에게 고유 한 점과 도메인 계층에서 표현해야하는 논리/동작이 다릅니다.

상속을 사용하거나 (아마도 최상의 솔루션) 이러한 역할을 사용자 지정 열거 형으로 실제로 만들 수있는 역할로 만들 수 있습니다. Jimmy Bogard가 동작으로 사용자 지정 열거 형을 확장하는 방법을 살펴보십시오.

관련 문제