2010-11-24 3 views
1

이 질문에 대한 답변을 드릴 수는 없지만 저의 질문에 대해서는 만족스럽지 않으므로 양해 바랍니다. 현재 구조를 개선하기 위해 기존 응용 프로그램 중 하나를 MVVM 패턴으로 변환 중입니다. 데이터 유효성 검사를 수행하는 가장 좋은 방법은 무엇일까?MVVM에서 유효성 검사와 관련하여 조언이 필요합니다.

현재 응용 프로그램은 데이터 바인딩을 사용하여 UI와 코드를 연결하고 유사한 값 (날짜 등 각각 하나씩)에서 재사용 할 수있는 몇 가지 유효성 검사 규칙과 값 변환기를 사용합니다.

MVVM에서 읽는 동안 IDataErrorInfo를 보았습니다. IDataErrorInfo는 뷰에서 유효성 검사를 유지하므로 바인딩을 설정할 때 반복적으로 코드가 줄어들고 더 구체적인 오류 메시지가 허용되므로 매력적입니다.

ValidationRules 반면 유효성 검사가 실패하면 바인딩 데이터의 전송을 차단합니다. 모델 값을 변경하려는 새 값이 필요하기 때문에 필요합니다. 유효한 값이 제공됩니다.

내 주요 관심사는 뷰 모델에서 너무 많은 것을 제한하면보기가 어려워 질 수 있다는 것입니다. 일반적인 경우에는 일을 편안한 수준으로 제한 한 다음 특정 사례를 해결하는 것이 좋습니다. 보기에 유연성이 더 필요하십니까?

내 주요 질문은 viewmodel의 속성에 유효성 검사와 변환을 넣는 것이 더 좋을까요, 아니면 내 validationrules와 valueconverters (또는 그 사이의 타협점)를 붙이는 것이 좋을까요?

덕분에, 제임스는

답변

2

IDataErrorInfo을 사용하여 뷰 모델에서 모든 유효성 검사를 구현하고 속성이 유효한지 여부에 따라 모델에 속성 변경 사항을 전달해야하는지 여부를 뷰 모델이 결정하도록합니다. 따라서 일반적인 설정 도구는 다음과 같습니다.

뷰에는 유효성 검사 또는 값 변환이 구현되지 않습니다. 그것은 단지 문제를 간청하는 것처럼 보입니다.

+0

고마워, 나는 마음에 비슷한 것을 가지고 있었지만, 그것이 올바른 방향인지 아닌지 확실하지 않았다. 뷰 모델이 모든 것을 처리하도록하는 것이 올바른 방법이라고 생각합니다. – Moonshield

1

나는 조합을 사용합니다.

코어 재사용 가능한 비즈니스 규칙에 대해 Idataerrorinfo를 내 엔터티에 사용합니다 (유효성 검사는 뷰 모델에 없습니다). 내 엔티티는이 방법으로 스스로를 검증 할 수도 있습니다.

그런 다음 문자열을 정수 텍스트 상자에 입력하는 경우와 같이 바인딩 오류가 내 엔터티에 적용되지 않는 위치에 대해 뷰 ValidationRules 뷰를 사용합니다.

+0

흠, 그건 내 생각이 향하는 방향과 같습니다. 모든 것을 한 곳에 모으는 것이 좋은 생각인데 조금 비실용적입니다. 뷰/바인딩에서 유형 검사 등을 수행하여 유효성 검사 규칙을 좀 더 일반화 한 다음 모델로 다시 푸시하기 전에 값을 확인할 수 있다고 생각합니다. – Moonshield

관련 문제