하지만, 요즘 같은 문제에 대해 생각하고있다. 공식화 된 코드 계약 (자동 검증 또는 확인)은 좋은 생각 인 것 같지만 일반적으로 검증 기능은 매우 제한적이며 null 또는 빈 문자열 검사와 같은 간단한 검사에는 많은 코드가 필요합니다.) 구식 수표보다.
역설적이게도, 문자열 케이스에 대한 제 생각으로는 null, 공백 또는 공백이 아닌 문자열을 감싸는 하나 또는 두 개의 클래스가 가장 적합합니다.
public class NonEmptyString : IComparable<NonEmptyString>, ...
{
private readonly string _value;
public NonEmptyString(string value)
{
if (value == null)
{
throw new ArgumentNullException("value");
}
if (value.Length == 0)
{
throw NewStringIsEmptyException("value");
}
_value = value;
}
public string Value
{
get { return _value; }
}
...
}
public class NonWhiteSpaceString : NonEmptyString
{
....
}
물론, 이러한 경우 주위에 전달하는 것은 그들 자신을 null로되어 있는지 확인하는 데에 방해가되지 않지만, 몇 가지 큰 장점이있어 :
이
- 당신은 비어 있거나 화이트 - 확인 필요는 없습니다 문자열이 반복되는 상황에서 오류가 발생할 수있는 공간 문자열 많이 지나친 다.
- 구현에서 수행 한 것처럼 null을 검사하는 것은 빈 값 (또는 공백 값)을 검사하는 것과는 다르다. 왜냐하면 전자의 경우 특정 ArgumentNullException을 던지고 두 번째 경우 ArgumentException을 던지기 때문이다.
- 모든 줄 바꿈 클래스가하는 것처럼 문자열의 값에 대한 제약을 분명히 알립니다. 사실 제약 조건이있는 문자열을 많이 전달하면 그 코드를 검사를 캡슐화하는 클래스에 랩핑하고 나머지 코드를 문제없이 유지하는 것이 좋습니다. 좋은 예가 특정 정규 표현식을 만족해야하는 문자열입니다. 그러나 여기에 질문에서 전환하고 있습니다 ...
이 링크는 [속성 및 메서드 차단을 사용한 인수 유효성 검사]에서 찾을 수 있습니다 (http://www.codinginstinct.com/2008/05/argument- validation-using-attributes.html) 유용 – Joe