Skip to content

11.1 仿掘金项目需求分析

稀土掘金是前端开发者最活跃的技术社区之一,选择掘金作为我们的综合实战项目,一方面是因为它的功能、体验做的都比较好,另一个原因是大家对它比较熟悉,所以业务和需求上理解的更快,我们可以专注实现功能。

在写本章的时候,笔者看到掘金已经更新了多个版本,功能比以前丰富了很多。但我们不会把掘金的所有功能都实现一遍,我们只做掘金中大家常用的几个核心功能模块,主要核心功能包括这些:

  • 首页模块:文章列表,包含分类,作者排行、专栏排行等。
  • 文章模块:文章的发布、修改、草稿箱,文章详情展示等。
  • 沸点模块:沸点广场,可以看到图文、评论、点赞等。
  • 用户中心:文章列表,统计数据,沸点、动态等。
  • 消息中心:社区用户的赞、评论、关注等消息。

我们将开发需求划分为以上的五个大模块,接着分析下每个模块需要实现哪些功能。

本项目源码已开放,请查阅GitHub 地址。建议大家 fork 项目并在本地运行,边看源码边阅读。

首页模块

首页往往是用户看到的第一个页面,也是用户最常逛的页面。在掘金中首页包含左、中、右三个部分。左侧是文章的分类,中间是主要区域,展示选中分类下的文章列表;右侧是广告区域,不过我们不会放广告,可以展示一个热门作者的排行榜。掘金首页如图 12-1 所示。

默认情况下,首页的文章列表是掘金按照推荐算法筛选出来的,每个人看到的都不一样。不过我们可实现不了这么复杂的功能,我们只做一个基础的查询即可,根据时间倒序查看文章列表(有分页)。

左侧的文章分类单独维护,与文章建立关联。右侧展示作者排行,因此首页的数据来源于文章模块和用户模块。

这里有一个关键点,就是作者的热度怎么计算?对于作者而言,发布的文章被读者认可,文章的阅读量和点赞量,就是热度最好的反应。掘金通过“掘力值”去计算作者的等级,我们也实现这个功能,因此这里的作者热榜可以是作者当日的掘力值排行。

文章模块

文章模块是最核心的模块,博客系统本来就是为写文章而服务的,因此文章模块的功能会复杂一些。可以将文章模块的功能按照读者和作者划分为两个部分,分别分析每个部分的功能。

读者功能

一个普通用户进入首页,首先可以看到文章列表,发现感兴趣的文章会点击进入详情查看。文章详情是仅次于首页的打开率第二的页面。文章详情里会展示该文章的所有数据,包括文章内容、阅读量、点赞量、作者信息、评论等,如图 12-2 所示。

当然用户在浏览过程中也会参与交互:进入文章详情会记录一次浏览,觉得文章写的不错可以点个赞,有意思的点也可以在评论区讨论。因此不光要保存文章的内容,还要记录有关文章的点赞、评论和浏览等数据,当然还有它的分类、标签等。

如果不进入文章详情页,读者在首页的文章列表中也可以点赞/取消点赞,并对赞过的文章标记。

作者功能

对于作者而言,除了查看文章,还需要有一个文章管理的功能。文章管理包括文章的创建、修改、查询、删除,在文章发布前还有一个草稿箱用于临时保存文章。

作者的掘力值通过创作文章和文章的阅读量积累而来,所以要设计掘力值的计算规则,具体如下:

  • 发表 1 篇文章:+10 掘力值。
  • 文章被点赞 1 次:+1 掘力值。
  • 文章被收藏 1 次:+1 掘力值。
  • 文章被阅读 100 次:+1 掘力值。
  • 文章被评论 1 次(一级评论),+1 掘力值。

在作者的创作体验上,是否有一个好用的文章编辑器至关重要。掘金的编辑器默认使用 Markdown 语法,这种语法非常适合写技术文章,支持代码高亮、图文上传、实时预览等功能,同时语法又很简单,作者不用考虑排版的问题。编辑器页面如图 12-2 所示。

我们也要实现一个类似的编辑器。在第六章的实战中我们开发了一款富文本编辑器,Markdown 编辑器虽然与它不同,但是也有很多相同之处。比如草稿箱编辑时要实现自动保存、粘贴图片时要自动上传,这两个逻辑在两种编辑器中就是通用的,可以拿来复用。

文章在创建过程中还要选择分类、添加标签,不过分类和标签我们会统一设置为静态数据,不需要作者编辑。但分类和标签会在筛选文章时用到,因此查询文章时要提供过滤参数。

沸点模块

掘金中的 “沸点” 其实就是帖子,用户可以在沸点广场发帖子,其他人点赞或评论,跟朋友圈一样。沸点是一个单独的社交属性的论坛,与文章没有关联,因此是一个单独的模块。

沸点的创建、删除、点赞、评论功能对所有用户开放,用户可以随时发沸点。沸点页面的布局与文章相似,左侧是沸点圈子(一种分类),中间是沸点列表,右侧是精选沸点,我们可以看作是今日沸点热度排行榜。沸点页面如图 12-3 所示。

沸点没有详情页,也不能编辑,用户可以在个人中心删除自己的沸点。掘金中的沸点有一个话题功能,本质上也是一种分类,因此话题功能我们就不再重复实现了。

话题圈子也是静态数据,我们设置几个常用的圈子即可。

用户中心

新版掘金新增了创作者中心入口,这里有文章管理、数据统计、实用工具等。我们常用的只有文章管理,因此把管理的功能集成到用户中心下,用户中心页面如图 12-4 所示。

该页面展示了用户基本信息,以及当前用户发布的文章、沸点等。在右侧展示了用户的个人成就(统计数据),包括点赞量、阅读量、掘力值的统计总量,还有粉丝和关注的人,该页面 URL 要根据用户的唯一标识生成。

如果是普通用户,该页面没有发布的文章;如果是作者,则展示自己发布的文章并且提供编辑按钮。

与此同时,还要有一个简单的编辑用户信息页面,也可以绑定其他额外信息。用户中心主要展示某个用户的基本数据,以及于该用户关联的文章、沸点等相关的数据。

消息中心

当用户发布的文章和沸点收到赞和评论、或者被其他用户关注时,当前用户会收到一条通知信息,并且在网页头部的小铃铛按钮上用红点标记提醒,可以看到有几条未读消息。如图 12-4 所示。

点击小铃铛就会进入消息中心,可以看到具体的评论、赞、粉丝,也可以在这里直接回复评论。消息中心是社区互动的关键,掘金在这里使用了即时通信(WebSocket)技术,当有新消息时服务器会主动推过来,用户可以立刻看到新消息提醒,体验非常炫酷。

默认情况下新消息都是未读状态,用户浏览或点击之后才会变成已读。当刷新页面时,未读的消息依然要保持未读状态,继续给用户展示未读提醒,不可以被刷新重置。

经过需求分析我们划分好了要做的模块,接下来就进入实现环节,了解 Serverless 云开发。