티스토리 뷰
Martin Fowler의 알림 패턴 변형을 사용하여 유효성 검사 및 관련 유효성 검사 오류 메시지를 처리했습니다.
다음은 "Boolean 또는 Count"질문을 해결할 수있는 특정 클래스입니다.
class Notification...
private IList _errors = new ArrayList();
public IList Errors {
get { return _errors; }
set { _errors = value; }
}
public bool HasErrors {
get {return 0 != Errors.Count;}
}
그의 패턴은 일반 유효성 검사 실패가 발생했는지 여부 ( 'Errors'수집 수를 기반으로 부울을 반환하는 'HasErrors')와 구체적으로 실패한 항목 (수를 파생 할 수있는 'Errors'수집)을 나타 내기 위해보다 세부적인 멤버를 사용합니다. 유효성 검사를 실행하는 '유효성 검사'코드는 모두 별도의 방법입니다 (유효성 검사가 필요한 비즈니스 / 도메인 개체에 있음).
이 패턴은 ( 내 자신의 이전 구현을 포함하여) 약간 구식 일 수 있지만 몇 가지 대안에 노출되고 구축 할 몇 가지 아이디어를 제공 할 수 있습니다.
-------------------IDataErrorInfo
인터페이스 를 구현하면 추가 코드없이 자동으로 유효성 검사를 컨트롤 (Winforms 및 ASP.NET 모두)에 바인딩 할 수 있습니다.
언뜻보기에는 첫 번째 옵션이 더 읽기 쉽다고 말하고 싶지만, 생각해 보면 두 번째 옵션이 더 적절 해 보입니다.
아마도 매우 주관적인 문제 일 것입니다.하지만 여기에 제 생각이 있습니다.
첫 번째 버전에서 소비 코드는 단순히 부울 값을 확인하는 것보다 더 많은 리소스를 소비한다고 생각하는 "카운트"를 수행해야합니다 (차이는 모든면에서 무시할 수 있음).
그러나 두 번째 버전에는 문제가 발생했음을보다 "명확한"표시가 있습니다. 유효성 검사는 테스트이며 "passed = false"는 테스트가 실패했음을 나타내는 반면 첫 번째 버전에서는 그러한 표시가 없습니다.
두 버전 모두에서 소비 코드는 버전 1에서-> 개수> 0은 실패를 의미하고 버전 2에서 통과 = true는 실패를 의미한다는 사실을 알아야합니다.
개인적으로 나는 당신이 가지고있는 것처럼 유효성 검사 실패를 수집하지만 예외를 던지고 해당 목록을 해당 예외에 대한 인수로 전달합니다. 결과적으로 소비 코드는 문제를 처리해야합니다.
그러나 다시 한 번, 내 의견은 순전히 주관적입니다.
-------------------객체의 유효성 검사를 위해 최근에 속성을 사용하여 유효성 검사 규칙과 관련 오류 메시지가 IValidationAttribute
인터페이스 를 구현하는 속성에 캡슐화되고 '검증 중'개체가 리플렉션을 사용하여 선택하는 유효성 검사기 개체로 전달됩니다. 'IValidationAttribute'의 모든 구현을 설정하고 내부의 유효성 검사 논리를 호출합니다.
Validator 객체는 하나의 객체 또는 객체 목록을 수락하고 유효성 검사를 수행하고 ValidationResult
결과 및 오류 가 포함 된를 반환 합니다.
이것이 도움이 될지 확실하지 않으며, 귀하의 요구 사항은 명확하지 않지만 속성이있는 객체에 대한 유효성 검사를 수행하는 매우 빠르고 명확하며 간결한 방법이라고 생각합니다.
-------------------복잡한 유효성 검사를위한 Broken Rules 컬렉션 입니다.
출처
https://stackoverflow.com/questions/1904995