API 소비자가 고객에 대한 업데이트를 시도 할 때 세 가지 사항을 확인해야합니다.
다음과 같은 경우 고객이 업데이트되지 않도록합니다.
이름 또는 성이 비어 있습니다.
특정 국가의 경우 고객의 내부 X 컬렉션이 비어 있으면 예외가 발생합니다. X는 설명하기 어렵 기 때문에 일부 컬렉션이라고 가정하면됩니다. 다른 모든 국가의 경우 X가 적용되지 않으며 항상 비어 있습니다. 하지만 특정 국가라면 X가 필요합니다. 따라서 거의 조건부 필수 속성입니다. 고객은 국가에 속하므로 전송되는 JSON에서 파악됩니다.
데이터베이스의 일부 조건이 참인 경우 고객이 업데이트되지 않도록합니다.
그래서 기본적으로 나는 다음과 같은 문제에 시달리고 있으며 그것을 해결하는 가장 적절한 방법에 대한 조언을 원했습니다.
저장하기 전에 고객 엔터티에 대한 유효성 검사를 수행하는 작업 필터를 만들어야합니까? 또는 ValidationAttribute에서 파생 된 사용자 지정 유효성 검사 특성을 만들고 IsValid 멤버 함수를 재정의하는 것이 더 낫습니다.
기본적으로 if (first name is empty, if x, if y, etc) vs (! ModelState.IsValid)
그런 다음 IsValid를 사용하여 사용자 지정 특성이 작동하도록합니다.
유효성 검사 속성은 "간단한"유효성 검사, 즉 필수 필드에 가장 적합한 것 같습니다. 그러나 "내 데이터베이스를 살펴 보거나 사용자 지정 값에 대한 http 요청 헤더를 분석해야합니다.이를 기반으로하여 invalid = false"와 같은 작업을 시작하면 이러한 종류의 작업을 거의 잘못된 것 같습니다. 엔티티.
생각?
감사!
나는 FluentValidation을 많이 좋아합니다 : https://github.com/JeremySkinner/FluentValidation
언급했듯이 기본 제공 유효성 검사 속성은 제한됩니다. 복잡한 유효성 검사의 경우 자체 속성을 구현하거나 이와 같은 라이브러리를 사용하는 것이 좋습니다.
FluentValidation에 대해 제가 좋아하는 한 가지는 필드 수준이 아닌 모델 수준에서 수행된다는 것입니다. 즉, 관련 필드의 값을 유효성 검사에 사용할 수 있습니다. 예를 들면
RuleFor(customer => customer.Discount).NotEqual(0).When(customer => customer.HasDiscount);
(프로젝트의 Wiki 페이지에서 발췌 한 코드)
또한 확장 가능하므로이 라이브러리를 기반으로 사용자 지정 유효성 검사기를 개발할 수도 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다