我正在尝试在我的应用程序中实现Like
功能(类似于Facebook)。我将有三种类型Like
s:喜欢帖子,喜欢评论(发帖),喜欢回复(评论)。稍后,根据like
活动,我想为用户生成动态通知列表。
对于这个任务,我认为继承会很好,所以我有以下类(Like
是基类)
Like
:LikeId,LikeDate,WhoLiked,WhooseLiked,IsNotificationRead
PostLike
:PostId
CommentLike
:CommentId
ReplyLike
:ReplyId
我需要生成一个如下所示的通知列表:
User1喜欢您的帖子(PostId
应附加到此商品)
User2喜欢您的评论(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"});
您是否认为我在这种情况下实现继承的方式有意义?你推荐另一种方法吗?你认为我需要继承吗?
由于
答案 0 :(得分:2)
除非你的例子中没有其他成员,否则你的做法似乎有点过分。另外做3个查询只是为了获得通知的喜欢似乎很重。
一个简单的实现是拥有一个Like
类TargetId
和TargetType
属性,然后根据TargetType
的值调整文本。你不会以这种方式获得导航属性,但你可能不需要它们。
如果你希望你的继承类像你的例子,至少重构,所以你只打了一次数据库:
var likes = db.Like.ToList();
var postLikes = likes.OfType<CommentLike>()...