2010-07-01 27 views
2

我們正在爲通過WCF公開數據的應用程序從頭開始設計對象模型。我們想知道如何處理其中有對象集合的對象。例如,一個包含地址對象集合的聯繫對象。SOA WCF對象集合的WCF類設計或「has-a」對象情形

contact - list<address> 

我們應該有一個包裝對象,像「AddressCollection」,它有自己喜歡「hascollectionloaded」的特性,對集合的延遲加載,和其他的東西我們沒有帶的思想,又或我們是否應該像上面那樣依靠名單<>?

contact - AddressCollection - list<address> 
          - hasBeenFullyLoaded 
          - preferredObjectLoaded 
          - somethingElsePertinent 

對於上面的例子,我們可以讓AddressCollection從一個抽象基類或接口實施「hasbeenloaded」和「somethingElsePertinent」屬性繼承?

或甚至在聯繫人對象本身上實現另一個布爾屬性「hasaddressloaded」。

contact - list<address> 
     - hasaddresscollectionloaded 

同樣,如何在聯繫人上實現不一定是集合的自定義對象?例如:

Contact - Status 

OR

Contact - StatusObject - Status 
         - hasStatusLoaded 
         - somethingElseWeWantToKnow 

回答

2

你的問題有點含糊,但我給它一個鏡頭。希望我們可以讓你回答一些問題。

首先,使用WCF返回集合的方式並不重要。 DataContractSerializer會在電線上正確序列化它們。對於.Net客戶端,他們可以維護原始的集合類型。其他訂戶(例如Java)將獲得一個數組。

我的第一個建議是:

A)使用契約優先發展創造訊息。您的服務應該是自治的,併爲每個呼叫提供一個單獨的請求和響應。這將在以後獲得更大的靈活性,並且還會使您獲得更好的設計。 B)你真的不應該暴露列表到外部世界,而是暴露一個集合或一個ReadOnlyCollection。

希望這會指出你在正確的方向。如果沒有,也許我們可以弄清楚你的最終目標是什麼,我們可以從那裏開展工作。

到目前爲止,這是我從你的問題看:

[DataContract] 
public class AddressResponse 
{ 
    [DataMember] 
    public Collection<Address> Addresses { get; set; } 

    [DataMember] 
    public string Status { get; set; } 

}