先看图,有个直观认识:
豆瓣首页上面的动态的类型有很多,有广播、日记、东西、(想看的)电影、(看过的)电影、友邻新关注的用户……等等很多很多,它是如何设计与实现的?
疑惑点主要是:
不同的内容数据存在不同的数据库,比方说广播存在 boardcast 表,日记存在 note 表,电影存在 movie 表……而豆瓣首页是按时间呈现动态的,如何在各个表中取出数据再做时间倒序排?难道是联合查询吗,那样的话用在查询数据库上面的时间岂不是很大。
再有就是如何针对不同的内容数据来渲染,比方说广播需要显示内容和赞评论等,而新写的日记显示摘要外还显示『喜欢』按钮……不同的内容虽然有大致一样的样式,但是细节上面又有区别,那么怎么显示?如果在 HTML 模板上使用模板引擎(如 Jinja2 )的 for 和 if 语法,但不同的内容类型不能写在一个 for 里面( for i in content ),因为模型对象的类型不一致;即使能克服上面的问题,那在 if 语句里面怎么判断内容的类型,再针对性地写渲染样式?
我能想到的是再加一个『中间表 timeline 』。当用户发表了日记,除了把数据写入 note 表,再把内容摘要写入 timeline 表(如内容类型代码 xxx ,时间 xxx ,内容 IDxxx 等);当用户发表了广播,除了把数据写入 boardcast 外,再把内容摘要写入 timeline 表(如内容类型 xxx ,时间 xxx ,内容 IDxxx 等)……这样首页动态流只需要从 timeline 表统一取数据,再根据不同的内容类型及其 ID 写不同的渲染样式。可是又有一个问题,如果我取关友邻, ta 的动态就不该出现在我的首页上,即在往这个 timeline 表插入数据时,如何做选择策略。
可能说的很乱,上一段可以不看。是不是我想复杂了,针对这个问题,不知道各位有什么设计和实现方法?还请不吝赐教,在下万分感激~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.