2012-12-06 33 views
4

我有一堆原始類型如int,小數,和DateTime的特性(這是,當然,一個結構)一個WCF數據契約。WCF Data Contract - 執行所需值的最佳/最乾淨的方法?

我的同事建議把他們都爲空的,然後通過檢查驗證無效在服務端所需的值。我相信推理部分是因爲它是一個序列化對象,你不能用數據契約上構造執行所需的值 - 它可以避免測試默認值的頭痛。

不過,我也想所需屬性在合同中隱含這樣一個客戶端可以有一些想法性質需要什麼。

因此,而不是做這樣的事情,

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

這將讓我清晰地測試空在服務端,我應該這樣做:

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

這是我的理解是如果屬性沒有被賦值或者默認值爲0,這將拋出異常 - 這是期望的行爲。這是在客戶端強制執行所需屬性的最佳做法嗎?將所有內容都設爲空並在服務端檢查它有什麼好處?

+0

我不知道我對你的問題有100%的理解......你能分享一下你的核心目標嗎? – Adil

+0

好的,我編輯了這個問題,試圖澄清。 – lintmouse

回答

5

我不認爲這是一個很好的方法,使所有的人都爲空,因爲那麼客戶將不會受到合約知道,如果一個領域確實需要與否。

如果你申請IsRequired=true那麼它是強制性的,以提供否則它會拋出異常字段值,但是這種方法比可空一個相對更好的...

在許多情況下我使用的DTO(數據傳輸對象)的不同服務......有必填字段......

+0

你能提供一個鏈接,在你使用它們的上下文中的DTO? – lintmouse

+1

這些文章可能會幫助你... http://www.designpatternsfor.net/default.aspx?pid=99 和 http://msdn.microsoft.com/en-us/magazine/ee236638.aspx – Adil

+0

太好了,謝謝。我會看看那些。 – lintmouse

相關問題