2010-03-12 95 views
1

我有一個通用的設計問題。網絡服務數據類型(合同)

我們有一個相當大的數據模型來表示臨牀對象,對象本身在層次結構中有200多個子屬性。

我們有一個SetObject操作和一個GetObject操作。我的問題是,最佳實踐明智的做法是在兩種操作中使用單一數據模型還是在每種操作中使用不同的數據模型?因爲Get操作將返回比Set所需更多的細節。

我的意思是一個例子:數據模型在Get操作中有ProviderId和ProviderName屬性,需要返回ProviderId和ProviderName。但是,在Set操作中,只需要ProviderId,並且ProviderName由服務忽略,因爲系統已經有了這些信息。在這種情況下,如果Get和Set操作使用相同的數據模型,即使對於Set操作,ProviderName也是暴露的,這是否會使開發人員感到困惑?

回答

1

它會說:這取決於:-)

沒有認真對待。你如何編輯/處理對象?我假設你的軟件正在調用WCF服務來檢索一個對象,使用一個ID或一個搜索詞或其他東西。

所以你找回具有200多個屬性的對象。你如何處理它,你通常會改變多少?

如果您通常只更改一些屬性 - 那麼可能在服務上使用對象ID,屬性名稱和新值的通用SetProperty方法可能有意義。不過想想這是怎麼回事工作:

  • 服務器端代碼將得到ID爲對象
  • 它會從數據庫
  • 它就會設置一個單獨的屬性添加到加載對象新價值
  • 將回到保存對象到數據庫

如果更新四個屬性是什麼?你會經歷4個週期。或者:您可以擴展SetProperty方法以包含(屬性名稱,值)對的字典。

所以我想這取決於您在任何特定時間更改了200個屬性中的多少個?如果你改變了10%,那麼20%的屬性 - 將整個修改過的對象傳回去不是更容易嗎?

0

這看起來像是將臨牀對象用作規範模型和提供寧靜風格服務接口的良好選擇。然後,您可以僅使用基於使用模型的字段提供不同的視圖或數據對象表示。你的動詞(get,set)將成爲http標準Get,Put。

有許多開源的Rest框架,您可以使用這些框架使其更容易上手。 Restlet是我成功使用的一個。