2012-12-06 7 views
4

int와 decimal과 같은 프리미티브 유형의 속성 집합과 DateTime (물론 구조체 임)의 WCF 데이터 계약을 맺고 있습니다.WCF 데이터 계약 - 필수 값을 적용하는 최선의 방법?

동료는 모두 null 허용 가능으로 설정 한 다음 null을 확인하여 서비스 끝에 필요한 값의 유효성을 검사 할 것을 제안했습니다. 추론의 일부는 직렬화 가능 객체이므로 데이터 계약에서 생성자와 함께 필수 값을 적용 할 수 없으며 기본값에 대한 테스트의 골치 거리를 피할 수 있다는 것입니다.

그러나 고객에게 필요한 속성이 무엇인지 알 수 있도록 계약에 암시 적으로 필요한 속성도 필요합니다. 그래서 그 대신 같은 일을

, 나를 깨끗하게 서비스 종료에 널 (null)을 테스트 할 수 있도록 할

[DataMember] 
public Nullable<int> AgencyID { get; set; } 

, 나는 이렇게 줄은 :

[DataMember(IsRequired = true, EmitDefaultValue = true)] 
public int AgencyID { get; set; } 

그것은 나의 이해입니다 프로퍼티에 값이 할당되지 않았거나 기본값이 0 (원하는 동작) 인 경우 예외가 throw됩니다. 클라이언트 측에서 필수 속성을 강제 적용하는 가장 좋은 방법입니까? nullable을 모두 허용하고 대신 서비스 끝에서이를 확인하는 것의 이점이 있습니까?

+0

귀하의 질문에 대한 100 % 이해를 얻었는지 확신 할 수 없습니다 ... 귀하의 핵심 목표는 무엇입니까? – Adil

+0

좋아, 나는 명확하게하려고 질문을 편집했다. – lintmouse

답변

5

저는 고객이 필드가 실제로 필요한 것인지 아닌지를 계약자가 알 수 없으므로 Nullable을 모두 사용하는 좋은 방법이라고 생각하지 않습니다. 당신이 IsRequired=true을 적용하면

다음

많은 시나리오에서 내가 다른 위해 DTO들 (데이터 전송 개체)를 사용했다 ... 그것이 예외를 슬로우 다른 필드 값을 제공하기 위해 필수입니다하지만이 방법은 Null 허용보다 상대적으로 더 낫다 서비스 ... 필수 입력란을 보유하고 있습니다 ...

+0

DTO 링크를 사용하는 맥락에서 제공 할 수 있습니까? – lintmouse

+1

이 기사는 도움이 될 것입니다 ... http://www.designpatternsfor.net/default.aspx?pid=99 및 http://msdn.microsoft.com/en-us/magazine/ee236638.aspx – Adil

+0

좋습니다. 나는 그것들을 살펴볼 것이다. – lintmouse