知识库和博客为什么要分成两个模块

教程是「体系」,随笔是「时间流」。一开始我把两者混在一起,结果首页写着「最新文章」,点进去却是某套教程的第 20 章——这篇记录拆分时的思考与取舍。

一开始这个站只有一个模块:知识库。它按「教程 → 章节」组织,一次上线就是一整套 20~30 章。首页那块「最新文章」直接取知识库最近更新的章节,于是读者看到的是这样的列表:

速查表:提示词、Skills、MCP、工作流清单
systemd 服务化与开机自启
Flutter Web 构建与部署
MongoDB 与半结构化数据

每一条都是「第 20 章」「第 30 章」这种没有上下文就没有意义的片段。问题不在排序,而在于两种内容被塞进了同一个容器

一、它们本来就不是一类东西

知识库博客
组织方式教程 → 章节,有目录与顺序单篇,按时间倒序
阅读方式从头顺读,或按需检索随便点开一篇
更新节奏少而重(一次一整套)轻而频繁
价值成体系、可查阅时效性、记录感

把两者混在一起,读者困惑(这条为什么不是完整的文章?),搜索引擎也困惑(页面之间缺少清晰的层级关系)。

二、拆分方案

  • 知识库:保持原样——分组 → 教程 → 章节,左侧目录,章节内可写笔记、划词备注;
  • 博客:新模块——单篇文章,Markdown 正文(后台可直接上传图片)、分类、标签、归档、RSS、浏览量;
  • 首页:两块并列,各自取最近更新,谁也不假装是对方;
  • 导航:首页 → 博客 → 知识库 → 关于 → 常见问题。

三、数据模型上的差异

知识库的表是两张:kb_category(教程)+ kb_article(章节,靠 category + sort 维持顺序)。 博客只需要一张 blog_post,外加一张可选的 blog_category:文章自带标题、摘要、封面、标签、发布时间,不依赖任何排序字段

发布时间与更新时间分开,是博客这条时间流的骨架:置顶优先、其余按发布时间倒序,发布时间为空就是草稿。

四、后台发布体验

写文章时最烦的两件事是「找图片」和「排版」。所以后台的编辑器做了这几件事:

  1. 正文用 Markdown,右侧可一键预览
  2. 「插入图片」把本地图片传到文件服务,按 Markdown 语法插到光标位置,也支持直接往编辑框里拖拽图片;
  3. 封面单独上传,前台列表以封面缩略图展示;
  4. 摘要有默认值(自动取正文前 120 字),slug 可以留空自动生成;
  5. 状态只有两个:草稿、发布。发布时自动补发布时间。

五、小结

模块拆分的判断标准不是“像不像”,而是内容的组织方式是否相同。组织方式不同,就应该是两个模块——哪怕它们看起来都是“文章”。

这次拆分之后,首页的两块各司其职:博客告诉你「最近在写什么」,知识库告诉你「这里有哪些成体系的东西」。

返回博客列表