2009-12-12 7 views
2

xVal을 사용하여 새 사용자의 등록을 확인하려고합니다. 새 사용자가 등록하려고 시도하는 사용자 이름을 이미 확인했는지 확인하는 논리를 구현하려고 할 때 버즈 톱을 봤습니다. 내 User 엔티티가 내 UsersRepository에 의존하지 않고도이를 수행 할 수있는 방법을 찾지 못하는 것 같습니다. 여기에 내가 내 사용자 엔티티에서 구현하는 방법을 찾아야 방법이다 :xVal의 저장소에 액세스해야하는 속성의 유효성을 어떻게 확인합니까?

public IEnumerable<ErrorInfo> ValidateUniqueUserName(string username) 
{ 
    if(usersRepository.Users.Exists(m => (m.UserName == username))) 
     yield return new ErrorInfo("UserName", "User name already exists"); 
} 

내가이 시나리오의 경우 xval를 사용하여 내 사용자 개체 내 UsersRepository에서 분리 유지하기 위해 계속 수있는 방법에 어떤 아이디어가?

답변

2

DDD는 도메인 유효성 검사 (불변 강제)에서 사용자 repo를 추상화하는 도메인 서비스가 있음을 제안합니다.

위의 예제 코드가있는 곳을 알고 싶습니다 (유효성 검사 서비스)? 하지만 도메인에 있는지 확인하는 것이 좋습니다. Here is a clever wayIDataErrorInfo 인터페이스를 여전히 지원하는 엔티티에 복잡한 검증을 첨부합니다.

당신의 Users.Exists 쿼리를 반환하는 유효성 검사 방법 내에서 도메인 서비스를 제안합니다. 뭔가 같은 : 예에서

 base.AddRule(new ValidationRule() 
     { 
      Properties = "username", 
      Description = "User name already exists", 
      validator =() => !(new UserService()).Users.Exists(m => (m.UserName == username)) 
     }); 

내가 REPO/데이터에 접근하지만 만약 당신이 좋아하면 당신은 공장 또는 수동 DI 객체 생성 방법을 사용할 수에 대한 UserService에 적절한 종속성을 주입 DI를 사용하는 것 이상 :

 base.AddRule(new ValidationRule() 
     { 
      Properties = "username", 
      Description = "User name already exists", 
      validator =() => 
       { 
        UserService us = ObjectFactory.GetInstance<UserService>(); 
        return !us.Users.Exists(m => (m.UserName == username)); 
       } 
     }); 

참고하십시오 above methodvalidator 속성이 잘못된 상태를 나타내는 데 false로 설정하도록 요구 (경우에 명확하지였습니다).

+0

네, 여기서는 순수한 DDD 접근 방식을 약간 연구해야한다고 생각합니다. 당신이 xVal에 익숙한 지 모르지만 xVal 예제에 따라 위의 코드는 실제로 User 클래스에 있습니다. 유효성 검사 기능을 저장소 (서비스 계층이 없음)로 이동하는 방법에 대해 생각했지만 저장소가 매우 복잡해졌습니다. 그것은 좋은 서비스 레이어가 필요해하지만 어디서부터 시작 해야할지 모르겠다. –

+0

분명히해야한다. xap을 내 asp.net-mvc 프로젝트에서도 사용하지만 'IDataErrorInfo'가 필요로하는 인덱서에 대한 오류 만 반환한다. 인터페이스. 나는 같은 일을하고있는 UR을 가정 할 것이다. 위의 예제에서 xVal 라이브러리에 대한 필요성을 제거했습니다. 내 코드 자체가 오류를 반환하기 때문입니다. 위의 연결된 SO 질문을 연구하십시오. 내 유효성 검사 코드도 엔티티 클래스에 있습니다 (서비스가 아니라 믿어야합니다). –

+0

내가보기에 xVal 코드가 얼마나 적 었는지 알았을 때, 내가 필요 없다는 것을 깨달았습니다. 내가 사용했던 유일한 코드는 내가 사용하는 'ErrorInfo' 클래스라고 생각합니다. 엔티티 클래스가'IDataErrorInfo'를 적절하게 구현하면 MVC는 유효성 검사 방법을 이해하기 만하면됩니다. 정말 쉽습니다. 내 코드 예제에서는 방법을 보여줍니다 - http://stackoverflow.com/questions/1721327/validate-object-based-on-external-factors-ie-data-store-uniqueness/1741831#1741831 –

관련 문제