2011-08-10 5 views
3

ViewModel과 비즈니스/도메인 객체 모두에 대해 유효성 검사 규칙을 반복하지 않아도되는 것을 어떻게 피할 수 있습니까?코드를 반복하지 않고 비즈니스 및보기 유효성 검사를 구현하는 방법은 무엇입니까?

예를 들어, 내 ViewModel에 DataAnnotation 특성을 사용할 수 있습니다. 그러면 내 MVC 웹 응용 프로그램에서 클라이언트 및 서버 측 유효성 검사를받을 수 있습니다. 그런 다음이 ViewModel은 일반적으로 비즈니스/도메인 객체에 매핑되고 서비스 비즈니스 로직에 적용됩니다. 즉, 유효성 검사는 동일한 규칙 또는 시뮬레이션 규칙을 사용하여 다시 발생해야합니다. 이 둘레에 어쨌든 있습니까?

답변

6

당신이 묘사 한 것은 정상적이고 받아 들일 만하다고 생각합니다. UI 및 데이터 주석을 사용자가 입력 한 데이터의 유효성 검사 문제를 즉시 표시 할 수있는 친숙한 UI 유효성 검사로 간주하십시오.

난 그냥 값의 유효성을 검사하지만 비즈니스 규칙을 적용하지 완전한 검증 할 수 있도록 비즈니스/도메인 객체의 유효성 검사를 고려할 것

이 그런

(예 -> 재고 항목이다 - 장바구니에 항목을 추가 하시겠습니까?) 항상 데이터베이스에 의해 수행되는 백 엔드 유효성 검사 (즉, 열에서 널 허용)입니다. 데이터베이스가 모든 필드에서 null을 허용하지 않는다면 언급 한 두 가지 이상의 장소에서 실제로 유효성 검사를 수행하는 것이 아니라고 생각합니다.

저는 결론적으로 비즈니스/도메인 객체가 모든 유효성 검사를 시행하고 클라이언트 측과 백 엔드 유효성 검사가 가장 기본적인 작업을 수행하기를 원합니다.

희망이 있습니다.

+1

위대한 설명. 내가 갈 규칙은 모든 논리적 인 경계 또는 계층을 재확인하는 것입니다. 이는 UI 레이어, 비즈니스 레이어, 데이터베이스 레이어, 서비스 레이어 등에서 유효성 검사를 의미합니다. –

0

두 개의 개별 객체를 검증하고 코드 복제를 피하려면, 사용자가 듣고 싶지 않은 대답을 할 수 있다고 생각합니다.

내가 생각할 수있는 유일한 예외는 반환 된 뷰 모델 (유효성이 검증되지 않은 모델)을 가져 와서 데이터베이스 작업을 수행하는 것처럼 모델을 채운 다음 유효성 검사를 수행하는 것입니다. 오류가있는 경우 다시 ModelState 사전으로 가져 와서 오류가있는 브라우저로 뷰를 반환하십시오. 이 접근법은 클라이언트 측 통합을 잃게 될 큰 부작용을 가지고 있거나 기껏해야 서버 측에 대한 많은 AJAX 호출을 필요로합니다.

저는 개인적으로 패배를 인정하고 노력의 중복을 가져오고 코드의 상당 부분을 재사용 할 수 있음을 인정합니다 (예 : 두 가지보기 모두에 배치 할 수있는 데이터 주석 속성 .보기 모델에서 모델과 비즈니스 모델

  • 수표는 제공된 정보가 올바른지 예를 들어 있는지 확인해야합니다.

    • 아니고 빈
    • 유효한 전자 메일 주소
    • 전자 메일 주소를 아직 사용하지 않았습니다.
    • 입력 한 값이 '전자 메일 확인'상자의 값과 일치합니다. 당신의 비즈니스 모델 내에서
  • 확인은 데이터가 올바른지 확인하십시오. 예 :

    • 비어 있지 않습니다.
    • 길이가 최대 길이보다 짧습니다. 당신이 데이터를 다른 인터페이스 (또는 건망증)에 의해 inconcistent 검사에 의해 오염 얻을 수 있음을 우려하는 경우

그러나, 비즈니스 로직, 다음, 비즈니스 로직에 방법의 일부를 복제하거나 모델 메타 데이터에도 적용됩니다.

관련 문제