Fluent Validation vs. Data Annotations [닫힌]


123

ASP.NET MVC 유효성 검사에 사용할 때이 두 유효성 검사 패키지 간의 작동 차이점은 무엇입니까? 개체 이름에 이르기까지 비슷한 개체가있는 것 같습니다. 하나가 다른 것과 관련이 있습니까? 그들의 차이점은 무엇입니까? 이러한 차이점은 어떤 방식으로 다른 사용 사례를 나타 냅니까?


52
건설적이지 않은 것으로 마감 된 질문은 일반적으로 많은 찬성표를 가지고 있으므로 실제로 사람들에게 도움이된다는 점도 흥미 롭습니다. 이 일에 뭔가 잘못이있을 가지고있다
드미트리 에피 멘코에게

2
나는 이러한 유형의 질문이 유용하다는 데 동의하지만 아래 답변은 사실이 아니라 나에게 더 많은 의견처럼 보입니다.
Ian Warburton

3
저도 전적으로 동의합니다. 그러나 "당신이 선호하는 것은 무엇입니까"대신 "차이점"을 묻는다면 아마도 상황을 피했을 것입니다.
Jeremy A. West

나는 답변이 사실보다는 의견에 근거하지 않도록 말해야한다고 생각합니다. "당신이 가장 좋아하는 것은 무엇입니까?"라고 묻지 마십시오. 그러나 "작동하는 차이점은 무엇입니까?" 그러면 "Fluent Validation을 선호합니다."와 같은 답을 얻지 못합니다. 대신 차이점을 먼저 보여주고 두 번째로 결과를 제시하는 것.
ruffin

답변:


113

Fluent Validation을 선호합니다 .

  1. 내 유효성 검사 규칙을 훨씬 더 잘 제어 할 수 있습니다.
  2. 다른 속성에 대한 조건부 유효성 검사를 수행하는 것이 데이터 주석에 비해 훨씬 쉽습니다.
  3. 내 뷰 모델에서 유효성 검사를 분리합니다.
  4. 단위 테스트 는 데이터 주석에 비해 훨씬 쉽습니다.
  5. 대부분의 표준 유효성 검사 규칙에 대한 우수한 클라이언트 측 유효성 검사 지원이 있습니다.

6
이 기사 ( webdevbros.net/2010/12/03/… ) 에서 몇 가지 추가 사항 : 1. 주석이 너무 많으면 모델이보기 흉해 보입니다 (포인트 3과 유사). 2. 더 나은 재사용 성 3. 더 나은 성능 (반사 없음) )
SiberianGuy

2
@Idsa 성능 포인트가 모호하게 들립니다. 반사는 모델 당 한 번만 발생하면됩니다. 이것은 좋은 구현을 가정 하고이 특정 구현이 어떻게 작동하는지 모르겠습니다.
CodesInChaos 2011-07-24

@CodeInChaos, 당신이 옳은 것 같습니다. 그러나 어떻게 구현되는지 확실하지 않고 게으 르기 때문에 거기에 보관할 것입니다.
SiberianGuy

2
나는 FluentValidation을 두 번째로 ... 흔들립니다. 코드 OCD 관점에서 볼 때 뷰에서 유효성 검사의 책임을 제거하고 자체 클래스를 제공하는 것이 좋습니다. MVC1에서 잠시 동안 xVal을 사용해 보았습니다 ... 데이터 주석은 간단한 작업에는 괜찮 았지만 몇 가지 규칙 이상을 얻으면 ViewModel이 무엇을 나타내야하는지 거의 알 수 없었습니다.
Brandon Linton 2011

@Darin 뷰에서 오류 메시지를 어떻게 전달합니까? 수행 방법에 대한 예를 제공 할 수 있습니까?
Jaime Sangcap 2014

32

데이터 주석을 선호하는 이유는 ...

  1. 모든 유효성 검사 규칙은 코드의 한 위치 (모델 메타 데이터 클래스 내) 에서 구성 할 수 있으며 다른 곳에서는 반복 할 필요가 없습니다.
  2. 데이터 주석 속성을 사용할 때 클라이언트 측 유효성 검사에 대한 탁월한 지원이 있습니다 (다시 한 번 – 유효성 검사 규칙을 반복하지 않음!) .
  3. 데이터 주석 속성이 있는지 테스트 할 수 있습니다 .
  4. 커뮤니티에서 만든 멋진 추가 유효성 검사 속성 이 있습니다 (예 : Data Annotations Extensions ).

2
이러한 속성의 대부분은 어떤 형태의 유창한 검증을 통해 얻을 수 있다고 생각합니다. 나는 OP의 라이브러리가 이것을 지원하는지 모르겠지만 원칙적으로 가능하고 그리 어렵지는 않습니다.
CodesInChaos 2011-07-24

속성의 존재를 테스트하는 포인트는 무엇입니까? 기본적으로 반복되는 유효성 검사 규칙이 아닌가요?
Sam

30
@Sam : 속성이 데이터 주석 속성으로 장식되어 있는지 여부를 테스트하여 속성 자체의 기능을 테스트하지 않습니다. 당신은 그것이 거기에 있는지 확인하고 있습니다. 2 년이 지난 지금 나는 Darin의 편이고 그의 대답에 동의한다고 말해야합니다.
Marius Schulz

@Sam, 누군가가 모델에서 그것을 제거하는지 알고 싶기 때문입니다.
Steve

3
위대한 코멘트 Marius. 현재 대부분의 EF 자습서는 데이터 주석을 사용한 유효성 검사를 보여줍니다. 또한 처음에는 주석의 단순성에 매료되었지만 사용자 지정 유효성 검사 규칙을 구현하려고 시도한 직후 Fluent Validation 팀에 바로 뛰어 들었습니다. 그런데 Darin이 게시를 중단 한 것이 너무 나쁩니다. StackOverflow에있는 그의 댓글은 5 년 이상 지난 후 자리를
잡았
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.