TimeSheetActivity 类具有分配的集合。分配是一个值对象,也被域中的其他对象使用,看起来像这样:
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 的 Allocation。如果不是,则将新的分配添加到集合中,但如果是,则将现有的分配替换为新的分配。
我目前正在使用 Dictionary 来维护集合,并以 Allocation.EventDate 作为键。它适用于域,但我想知道密钥已经是值的一部分这一事实本身是否不是“难闻的气味”。
除了字典值之外,我也没有理由坚持任何东西。因为我使用的是 NHibernate,所以我可能需要编写一些自定义类型来做到这一点,我想知道这是否也是我应该使用不同类型的集合的线索。(这也是分配类中的虚拟属性的原因)。
我正在考虑的主要替代方案是带有专用 EqualityComparer 的 HashSet。
你怎么看?
干杯,贝里尔