【问题标题】:How to model voting for different object types in your data model如何在数据模型中为不同对象类型的投票建模
【发布时间】:2011-06-02 16:35:19
【问题描述】:

我有几个对象,我希望我的用户能够支持/反对投票。 (类似于 SO 问题)如果它只是一个对象类型,我可以有一个简单的一对多关系,但我至少有三个需要投票跟踪的对象类型。

我正在使用 MVC3 和 EF CodeFirst。

这是初稿

public class Deed
{
    public int DeedId { get; set; }
    [Required]
    public string Name { get; set; }
    public string Description { get; set; }
    public virtual ICollection<Vote> Votes { get; set; }
}
public class Vote
{
    public int VoteId { get; set; }
    public string UserId { get; set; }
    public int Value { get; set; }  // +1, -1
    public ItemType VoteType { get; set; }
    public int ItemId { get; set; }
}

public enum ItemType
{
    DEED,
    ACTIVITY,
    IDEA
}

我会遇到什么样的麻烦?另一种方法是保持投票表与其他实体完全无关,并使用存储库来填充 Deed、Activity 和 Idea 对象的 VoteTotal 字段。

【问题讨论】:

  • 您是否尝试过使用继承并使投票与顶级类型有关系?例如Deed、Activity 和 Idea 都可以继承自 Item,它们与投票是一对多的关系。 (您应该能够使用 EF 继承)

标签: c# asp.net-mvc-3 ef-code-first


【解决方案1】:

您可以使用基类,例如“VotableObject”,Deed、Activity 和 Idea 将从该对象继承。

投票将连接到基类。

【讨论】:

  • 不错的主意,但我对在这里使用继承犹豫不决。当然,“契约”是“可投票对象”,因此继承似乎是可行的。但这就像让网站上的所有产品都继承自“PurchasableObject”。感觉还是不对。我想我正在寻找某种类型的构图模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 2015-10-18
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
相关资源
最近更新 更多