【发布时间】:2015-04-24 01:19:08
【问题描述】:
我正在尝试在我的应用程序中实现Like 功能(类似于 Facebook)。我将有三种类型的Likes:对帖子的点赞、对 cmets 的点赞(对帖子)和对回复的点赞(对 cmets)。后来,我想根据like的活动为用户生成一个动态的通知列表。
对于这个任务,我认为继承会很好用,所以我有以下类(Like 是基类)
Like : LikeId, LikeDate, WhoLiked, WhoseLiked, IsNotificationRead
PostLike: PostId
CommentLike: CommentId
ReplyLike:ReplyId
我需要生成一个通知列表,如下所示:
用户 1 喜欢您的帖子(
PostId应该附加到此项目)用户 2 喜欢您的评论(
CommentId应该附加到此) 项目)User3 喜欢您的回复(
ReplyId应该附加到此项目)
但是,过去 2 天我很难生成此输出。最后,我得出结论,我不能在单个 LINQ 语句中使用 dbcontext.Likes 来获得此输出。
我打算为每个继承的实体单独生成列表,并在最后合并所有列表:
var postlikes = db.Like.OfType<PostLike>().Select(a =>
new {Text = "User1 liked your post", ItemId=a.PostId, Type="Post"});
var commentlikes = db.Like.OfType<CommentLike>().Select(a =>
new {Text = "User1 liked your comment", ItemId=a.CommentId, Type="Comment"});
var replylikes = db.Like.OfType<ReplyLike>().Select(a =>
new {Text = "User1 liked your reply", ItemId=a.ReplyId, Type="Reply"});
您认为我实现继承的方式在这种情况下有意义吗?你推荐另一种方法吗?你觉得我这里需要继承吗?
谢谢
【问题讨论】:
-
如果你想通知用户,最好有一个 UserNotification 对象,它可以独立于通知的来源(新的喜欢,新的评论等),这样您有一个很好的界面,可以在添加功能时添加新的通知类型。这个对象可以包含一个接口的实例(例如 INotifiable),它链接回适当的对象。
标签: c# linq entity-framework inheritance