속성을 사용하는 .NET 매개 변수 유효성 검사를위한 표준 프레임 워크가 있습니까?

StackOverflow https://stackoverflow.com/questions/138133

문제

메소드 속성에서 공통 파라미터 유효성 검사를 수행 할 수있는 표준 프레임 워크 (Enterprise Library ... 또는 .NET 자체)가 있습니까?

도움이 되었습니까?

해결책

마이크로 소프트 코드 계약, 4.0 CTP 이후 .NET 프레임 워크의 일부이며 이전 .NET Framework 버전에서 독립형 패키지로 사용할 수 있으므로 코딩 가정을 지정할 수 있습니다. 여기에는 매개 변수를 검증 할 수있는 사전 조건 지정이 포함됩니다.

매개 변수 점검에 대한 예제는 코드 계약 문서):

public Rational(int numerator, int denominator)
{
    Contract.Requires(denominator ! = 0);

    this.numerator = numerator;
    this.denominator = denominator;
}

코드 계약을 사용하면 이점은 미래의 .NET 프레임 워크 릴리스의 일부가 될 라이브러리이므로 조만간 응용 프로그램에서 하나의 종속성이 적을 것입니다.

편집하다: 인수 확인을 위해 속성을 사용하는 라이브러리를 구체적으로 요구하는 것을 알았습니다. 해당 코드 계약은 그렇지 않습니다. 코드 계약이 속성을 사용하지 않는 이유는 자주하는 질문:

사용자 정의 속성을 사용하는 장점은 코드에 전혀 영향을 미치지 않는다는 것입니다. 그러나 메소드 호출을 사용하는 이점은 겉보기에는 자연스럽게 첫 번째 속성을 선택하는 것보다 훨씬 큽니다.

런타임 지원 : 이진 재 작성자에 의존하지 않으면 속성으로 표현 된 계약은 런타임에 시행 될 수 없습니다. 즉, 런타임에 시행하려는 전제 조건 (또는 기타 계약)이있는 경우 코드의 계약을 복제하거나 빌드 프로세스에 바이너리 리 작가를 포함시켜야합니다. Contract.RequiresAlways는 선언 계약과 런타임 확인 유효성 검사로 사용됩니다.

구문 분석 필요 : 사용자 정의 속성과 함께 사용할 수있는 값은 제한되므로 조건은 문자열로 인코딩됩니다. 이를 위해서는 모든 소스 언어에 적합한 새로운 언어를 정의해야하며 문자열을 구문 분석해야하므로 컴파일러가 이미 가지고있는 모든 기능을 복제해야합니다.

IDE 지원 부족 : 문자열로 표현 된 Intellisense, 유형 확인 또는 리팩토링에 대한 지원은 없으며,이 모든 것은 계약서를 코드로 작성하는 데 사용할 수 있습니다.

다른 팁

Microsoft Enterprise Library에는 Microsoft.practices.enterpriselibrary.validation Library/Namespace가 있으며 속성을 사용하여 유효성을 검증 할 수 있습니다.

Microsoft Code Contracts는 잠시 동안 출시되지만 여전히 MS Research에서 호스팅되며 구성 (App.Config/Database 등)을 사용하여 켜지거나 끄거나 규칙을 변경할 수 없습니다. 내 도서관 경비원 선언적 규칙 정의를 제공합니다. 소스 코드 또는 app.config 항목 엔티티 클래스/속성 레벨의 규칙에 대한 속성. 라이브러리는 LGPL에 따라 OpenSource입니다 (상용 제품에서 자유롭게 사용할 수 있음). App.Config를 통해 규칙을 구성하면 다시 컴파일 필요없이 규칙 설정을 조정할 수 있습니다.

동적 데이터 ASP.NET (및 ASP.NET MVC)의 경우 속성을 사용하여 모델 속성에 대한 검증을 수행 할 수 있습니다.

당신은 또한 사용할 수 있습니다 포스트 쇼트 유효성 검사를위한 자신의 속성을 구현하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top