TimeSheetActivity類具有一個Allocations集合。分配是該領域使用的其他對象,以及,看起來像這樣的值對象:收藏查詢;替代字典
public class Allocation : ValueObject
{
public virtual StaffMember StaffMember { get; private set; }
public virtual TimeSheetActivity Activity { get; private set; }
public virtual DateTime EventDate { get ... }
public virtual TimeQuantity TimeSpent { get ... }
}
爲同一Allocation.EventDate重複分配是不允許的。因此,當客戶端試圖對活動進行分配時,會檢查相同Allocation.EventDate是否已存在集合中的分配。如果不是,那麼新的分配將被添加到集合中,但是如果是這樣的話,則將現有的分配替換爲新的分配。
我目前正在使用Dictionary來維護集合,以Allocation.EventDate爲關鍵。它適用於域名,但我想知道密鑰是否已經是價值的一部分本身並不是一種'難聞的氣味'。
我也沒有理由堅持除字典值之外的任何東西。因爲我使用的是NHibernate,所以我可能需要編寫一些自定義類型,並且我想知道這是否也是我應該使用不同類型的集合的線索。 (這也是Allocation類中的虛擬屬性的原因)。
我正在考慮的主要選擇將是一個具有專用EqualityComparer的HashSet。
您認爲如何?
乾杯, Berryl
我知道這是一個非常古老的問題。但我想知道爲什麼沒有人提出鏈接列表,畢竟這是字典內部用於衝突散列的內容。 `Dictionary`不能有重複鍵的唯一原因是當你看起來一個鍵時它不知道該返回什麼。 (順便說一下,使鏈接類型成爲一個結構體,在性能上節省了很多。) –
Aidiakapi
2011-11-16 19:05:56