评论系统设计

3,445 阅读1分钟

评论系统的几个需求

  1. 玩家能够对用户的文章或者游戏进行评论。
  2. 评论列表以主评论加回复的形式呈现,形式和微博一样。
  3. 评论列表可以按时间和点赞数排序。
  4. 每个评论附带3条点赞数最高的回复,展开评论回复的时候,则以创建时间正序排列。

最终效果

数据结构设计

一: 回复也是评论的一种,可以将他们统一成一种数据结构,

因为评论多种类型的实例,在数据库中记录topictopic_type, 利用Mongoose schema virtual特性能够获得评论主题的实例。

数据结构如下

//  CommentSchema
topic: string; // 评论主题的_id
topic_type: string; // 评论主题的SchemaName
from_uid: string; // 评论者的_id
to_uid: string; // 对谁回复,表明这是一条回复,而不是评论
content: string; // 评论内容
created_at: Date; // 评论创建时间
liked_count: number; // 点赞数
comment_id: string; // 回复的评论的_id, 表明这是一条回复,而不是评论
reply_id: string; // 回复某条回复的_id,这是对某条回复的回复

将评论和回复分成两种数据结构

我们也可以把主评论和回复分成两张表,这样可以减少单个表的大小,只查看回复的时候,只对回复表进行查询即可,结构上也比较清晰,避免第一种数据结构需要循环大数组的情况。

// CommentSchema
topic: string;
topic_type: string;
from_uid: string;
content: string;
liked_count: number;
created_at: Date;

// ReplySchema
comment_id: string;
reply_id: string; // 代表是对某条回复的回复
from_uid: string; // 回复者
to_uid: string;  // 对谁回复
content: string;
liked_count: number;
created_at: Date;