저장소 패턴을 사용할 때 비즈니스 로직을 어디에 두어야합니까?

StackOverflow https://stackoverflow.com/questions/1618673

  •  06-07-2019
  •  | 
  •  

문제

응용 프로그램에 저장소 패턴을 사용하고 있습니다. 수업 사용자가 있습니다. 사용자는 이메일로 식별됩니다. userrepository에는 Method CreateUser (사용자 사용자)가 포함되어 있습니다. 사용자에게 고유 한 이메일이 있어야한다는 비즈니스 규칙이 있습니다.

이메일이 사용 중인지 여부를 확인하는 트랜잭션을 구현하고자합니다. 그렇지 않은 경우 사용자가 생성됩니다. 이메일의 고유성을 확인하는이 코드를 어디에 넣어야합니까?

이것은 확실히 비즈니스 규칙입니다. 비즈니스 논리입니다. 이 점검을 사용자 보고서 구현에 넣는 것이 옳지 않다고 생각합니다.

도움이 되었습니까?

해결책

이런 종류의 것은 일반적으로 (1) 서비스 또는 (2) 데이터베이스 제약 조건 (및 종종 둘 다)으로 스키마에 직접 들어갑니다.

서비스를 사용하면 클라이언트 코드에서 직접 저장소에 액세스하지 않습니다. 유용한 작업을 수행하는 서비스를 호출합니다.

예를 들어 :

public class UserService : ... {
  private Repository<User> _userRepository;

  public void CreateUser(User u) {
    // Verify that the user's email is unique.
    if ( ... ) {
      _userRepository.Create(u);
    }
  }
}

다른 팁

보증 할만 큼 큰 응용 프로그램을 구축하는 경우 저장소 패턴 그런 다음이 유효성 검사를 가능한 한 데이터에 가깝게 배치하려고합니다. 아마도 고유 인덱스/키와 같은 데이터베이스 제약 조건 일 것입니다. 이는 부패한 데이터로 인해 나중에 버그가 코드로 유출되는 것을 방지합니다.

스토리지에 데이터베이스를 사용하고 있다고 가정하면 데이터베이스의 이메일 열에 고유 한 제약 조건을 추가해야합니다.

간단한 대화 에서이 훌륭한 기사를 확인하십시오.

피해야 할 5 가지 간단한 데이터베이스 설계 오류

섹션 4에서 참조 :

응용 프로그램을 통해 무결성을 시행합니다

응용 프로그램 기반 무결성의 지지자들은 일반적으로 제약이 데이터 액세스에 부정적인 영향을 미친다고 주장합니다. 또한 응용 프로그램의 요구에 따라 규칙을 선택적으로 적용하는 것이 가장 좋은 경로라고 가정합니다. .....

솔루션은 간단합니다.

제공 할 다른 것이 없습니다 완전성과 정확성을 제외하고 데이터베이스 자체. 아무것도, 나는 데이터베이스 외부의 사용자 나 응용 프로그램을 의미하지 않습니다. **

따라서 귀하의 경우 - 이메일 열의 고유 한 제약 조건은 실제로 데이터베이스에서 모델링되어야합니다. 그것은 비즈니스 논리를 넣을 수있는 가장 좋은 곳이며, 장기적으로 많은 슬픔에서 당신을 구할 것입니다.

마크

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