假设我想为我的ASP构建一个评论系统。NET MVC网站。在我的Comment
模型中,我想保留对喜欢或不喜欢特定评论的用户的参考。
我现在的模型是:
public class Comment
{
public int CommentId { get; set; }
public int PostId { get; set; }
public string Body { get; set; }
// Problem lies here
public virtual ICollection<?> LikedUsers { get; set; }
public virtual ICollection<?> DislikedUsers { get; set; }
}
<标题>问题:引用这些用户的最佳方式是什么?
我想到的事情是:
存储喜欢/不喜欢评论的userid列表,如:
public virtual ICollection<int> LikedUserIds { get; set; }
直接引用这些用户,但这里的问题是,我不知道我应该使用哪种类型的
ICollection
直接在MVC中引用用户。我想知道如果用户在ASP。. NET身份有一定的数据类型,所以我可以在这里使用?
提前感谢您的建议
标题>您在这里试图存储的是键值对的典型示例。键是用户,值是他对评论的评价。请注意,我说的是评级而不是喜欢/不喜欢,因为这才是抽象领域的含义。如果你后来选择使用"stars"或"score",并且有5个可能的评级值,那么重构将更容易。
:
- 使用
Dictionary<User, Rating>
,其中Rating
是一个enum与您的值(喜欢,不喜欢)。 - 实现自己的
User
域对象。ASP。NET提供了IPrincipal
,它应该仅用于安全目的。对于用户来说,这不是一个好的领域表示。你总是可以从IPrincipal映射到你自己的User对象,在合适的地方(例如,登录后)。