2011-10-02 5 views
3

일반적인 MVC 응용 프로그램에서 우리는 여러 곳에서 유효성 검사를 수행합니다. 이는 클라이언트 측, 제어기에서, 그리고 다시 데이터 레벨에서 일어날 수 있습니다. 비즈니스 계층이있는 경우 여기에도 추가 유효성 검사가 있습니다.계층/계층에서 유효성 검사를 통합하는 방법

우리는 DRY를 위반하지 않도록 모든 것을 통합하고 유효성 검사가 변경 될 때 악몽을 낳습니다. 하위 질문은 모든 레이어에서 모델을 기반으로 동적 유효성 검사를 활성화하는 방법입니다.

예 : 데이터 주석 속성이있는 ViewModel이있을 수 있습니다. MVC2/3에서는 클라이언트 측 및 컨트롤러 유효성 검사를 통합하지만 데이터 모델을 뷰 모델로 사용하지 않는 한 데이터 모델에는 도움이되지 않습니다. 이는 좋은 방법이 아닙니다.

즉, 동일한 유효성 검사를 데이터 모델 및 비즈니스 계층에 추가하여 복제해야합니다. 또한 데이터 모델은보기 모델과 약간 다른 유효성 검사 요구 사항을 가질 수 있습니다 (예 : 전체 데이터 레코드가 여러 단계의 마법사보기 모델로 구성 될 수 있으며 전체 레코드 만 저장할 수 있음).

일부 사용자는 부분 클래스가있는 EF 나 L2S와 같은 ORM을 사용할 때 데이터 모델에 복잡한 유효성 검사를 추가합니다. 올바른 경로인지는 확실하지 않습니다. 주로 데이터 지향 (데이터 입력 유형 앱) 인 앱에서 작동하지만 비 데이터 비즈니스 로직이 더 많은 앱에서는 작동하지 않습니다.

내가 원하는 것은 모든 레이어에 대한 유효성 검사를 생성하거나 단일 유효성 검사 시스템에 연결하는 방법입니다. 존재하는 것과 비슷한 것이 있습니까?

+0

어쩌면 레이어 사이의 유효성 검사 규칙을 번역하기 위해 Automapper와 같은 것이 있어야합니다. – Benjamin

답변

0

데이터 모델, 비즈니스 모델 및보기 모델이 거의 같지 않기 때문에 답변을 이해할 수 없을 것 같습니다. 그렇다면 데이터 모델을 사용하고 유효성 검사를 수행하십시오. 모든 레이어의 유효성 검사는 해당 레이어에만 적용됩니다.

예 : 사용자가 ui 계층을 변경하거나 새 계층을 만들 때를 대비하여 비즈니스 계층 논리가 포함되지 않아야합니다.

+2

UI에는 종종 비즈니스 논리가 포함되어야합니다. 예를 들어, 필드가 두 개의 매개 변수 내에 있는지 확인합니다. 이 유효성 검증 만 데이터 모델에 넣으면 오류를 얻기 위해 왕복해야합니다. UI에만 넣으면 서버 측에 나쁜 값을 넣을 위험이 있습니다.특히 클라이언트 측 유효성 검사를 고려할 때 모든 계층에 걸쳐있는 비즈니스 로직이 여러 가지 있습니다. –

1

"Fluent Validation"은 재사용 성이 뛰어납니다. 을 방문하십시오. http://fluentvalidation.codeplex.com/

Fluent Validation을위한 재사용 가능한 문서.

http://fluentvalidation.codeplex.com/wikipage?title=CreatingAValidator&referringTitle=Documentation&ANCHOR#Collections

하나가 당신의 필요를 채울 풀 수 있습니다 아래의

http://fluentvalidation.codeplex.com/wikipage?title=CreatingAValidator&referringTitle=Documentation&ANCHOR#ReusingValidators. http://tnvalidate.codeplex.com/

+0

Fluent Validation은 클라이언트 측 유효성 검사도 처리합니까? 전적으로 서버 측 검증을 작성하는 것은 어렵지 않습니다. –

+0

http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2를 참조하십시오. – vrluckyin

+1

죄송하지만 그게 뭔가요? Fluent Validation과 관련이 있습니까? 이는 사용자 지정 유효성 검사 특성에 대해 설명합니다. 클라이언트 측을 처리하기 위해 사용자 정의 유효성 검사 속성을 생성해야하는 경우 Fluent Validate 서버 측을 사용하면 어떤 점이 있습니까? –

관련 문제