문제

나는 DDD (도메인 구동 설계) 방식을하려고 노력하고 있습니다. 그리고 소년은 내가 어려움을 겪습니다. 내가 읽은 모든 책에서 인증은 걱정할 필요가 없으며 언급되지 않았습니다!

사용자 등록 및 로그인, 소금에 절인 암호 등을 작성하는 책임을지는 자체 인증 및 멤버십 서비스를 작성했습니다. .NET의 멤버십 제공 업체를 사용하지는 않지만 양식 인증에 의존합니다.

사용자 이름, 이메일, PasswordHash, ApprovordStatus 등을 보유하는 사용자 모델을 구현했습니다.

이제 나머지 도메인 모델은 사용자와 관련이 없어야한다고 생각합니다. 사람과 관련 데이터를 모델링하는 데 익숙한 수업자가 있습니다. 따라서 사용자와 비 사용자의 개인 데이터를 모델링하는 데 사용할 수 있습니다. 유형 회사의 대상은 사용자가 아닌 사람과 함께 작동합니다. 그리고 활동은 사용자가 아닌 사람에게 할당됩니다.

질문, 개인 모델을 사용자 모델과 어떻게 연관 시키는가? 나는 두 모델 중 하나에서 서로에 대한 참조를 원하지 않습니다. PersonUser라는 관계 모델을 생성하고 현재 인증 된 사용자의 개인 개체를 검색하는 추가 서비스를 작성해야합니까?

도움이 되었습니까?

해결책

당신이 제시 한 내용으로 판단하면 몇 가지 알려진 사실이 있습니다.

  1. 모든 사용자는 사람입니다
  2. 모든 사람이 사용자 인 것은 아닙니다

그렇다면, 나는 사용자를 사용자와 관련하여 사용자를 사용자와 관련시킬 수 있도록 Nullable userID 필드를 포함하도록 사람 모델을 확장 할 것입니다.

이제 나는 또한 당신이 사람 모델에 몇 가지 "페치"방법이 있다고 가정 할 것입니다. ID, 이름, 부서 등으로 사람을 검색합니다 ...

나는 사용자로부터 사람 객체를 검색하기 위해 과부하 (또는 다른) 페치 메소드를 생성합니다 (이것은 ID 또는 Foll 사용자 객체 일 수 있음).

public IPerson Fetch(IUser user) {}

물론, 모든 사용자도 사람이라는 알려진 사실이 있기 때문에 개인적으로 사람의 재산을 포함시키기 위해 사용자 대상을 확장하는 데 개인적으로 해를 끼치 지 않습니다.

public interface IUser 
{
   ...
   IPerson Person { get; set; }
}

그런 다음 언제나처럼 사용자 객체를 반환 할 수 있습니다.

사용자 <-> 사람의 "매핑"테이블을 만드는 것이 위에서 설명한 것 이상으로 많은 것을 얻을 것인지 확실하지 않습니다 (데이터를 제거하기 위해 Hardcore DBA에서 Kudo를 얻을 것입니다). 나에게 그것은 동일한 효과를 얻기 위해 가입해야 할 여분의 테이블 일뿐입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top