2010-11-04 48 views
1

我有一個字典數據結構,必須使用WCF傳遞。爲此,我使用get和set方法創建了一個成員屬性。我可以basicly實現相同的功能,與此屬性是無論是:IList <KeyValuePair>與IDictionary充當WCF中的[DataMember]

IDictionary<keyType, valueType> 

IList<KeyValuePair<keyType, valueType>> 

我可以看到選擇一個比其他任何強有力的理由。我能想到的一個溫和的重複是:

IDictionary - 閱讀代碼的人會認爲IDictionary更有意義,因爲數據結構是字典,但就通過WCF傳遞的內容而言,它們都是相同的。

任何人都可以想到選擇IList的理由嗎?如果沒有,我只需要與IDictionary一起去。

回答

4

根據使用情況設計你的接口,而不是實現。

如果某個類的使用者需要遍歷整個集合,請使用IEnumerable。如果他們應該能夠修改結果並需要基於索引的訪問,請返回IList。如果他們想要特定項目,並且有一個有用的鍵值,則返回IDictionary

編寫的內部代碼這樣,太:)

+0

消費者是我自己的代碼,唯一的屬性是使WCF的數據結構可序列化。 getter setter所做的唯一事情就是枚舉結構的成員,所以你可以選擇IEnumerable看起來像最簡單的東西,可以工作,這總是很好:-) – 2010-11-04 05:07:04

+0

@David:「該屬性的唯一目的是使數據結構由WCF序列化「。我不能聲稱在沒有看到代碼的情況下完全理解你的場景,但是這聽起來像你在設計中可能有一些混合的抽象層次,這導致這樣的決定過於複雜。 – 2010-11-04 05:25:52

+0

你能評論一下嗎? – 2010-11-04 07:04:40

0

這取決於你的消費者。我會迎合最可能的用例,儘可能簡化API。邊緣案例總是可以通過Values集合迭代字典。

不要讓他們考慮一下。如果術語字典是他們將作爲操作結果考慮的內容,那麼帶有名稱的類型是非常有用的東西。

0

如果keyValuePairs收集預計獨特的鍵,你可以使用字典。 如果同一個鍵可以出現在多個keyValuePair中,請使用Ilist/ienumerable。

相關問題