【问题标题】:How would you model a read/follow systems?您将如何为阅读/关注系统建模?
【发布时间】:2013-03-06 15:40:14
【问题描述】:

所以我有以下领域模型:

Article 基本上是一篇博文,目前是一个实体。

现在,我想添加以下功能:

  • 当用户(在其浏览器中)查看文章时,会调用 api 将博客文章“标记”为已读。

现在,如果我进行一些计算,我应该能够确定哪些文章还没有被阅读。

  • 当用户对某篇文章发表评论时,系统会调用 api 来“标记”该博文为被关注。

现在,如果我进行一些计算,我应该能够确定自最新用户发表评论以来是否有一些新发布的 cmets。

基本上,两个功能(阅读和关注)共享属性、文章 ID、用户 ID 和阅读/操作日期。

请注意,如果关注文章,然后阅读,则应使用阅读日期。

因此,我虽然可以使用相同的对象并添加额外的属性以将其标记为跟随。

你有什么设计想法吗?

请注意,有很多文章和用户,我使用的是 Doctrine2 和 MySQL,但这适用于任何语言。

【问题讨论】:

    标签: oop model domain-driven-design


    【解决方案1】:

    为了确保您的应用程序能够很好地扩展,我会在触发事件时在本地进行计算。 IE。某人添加了一条评论,这会导致系统检查谁对该新评论进行了投资。否则,您最终会得到一个处理所有数据的计划任务,该任务一开始运行良好,但随着用户、文章和 cmets 之间关系的增加,工作量将呈指数级增长。

    您也可以考虑使用 Map/Reduce 模式,Ayende 有一篇很好的介绍文章,与您描述的应用领域几乎相同(文章、cmets 等)。

    至于将文章或评论标记为已被特定用户阅读的事件,这既不是文章也不是用户的事情。如果您正在使用文档数据库并希望针对用户存储这些数据,那么随着时间的推移它可能会积累大量数据,我更倾向于将数据存储在新实体中或针对文章(从理论上讲,这会引起最初的兴趣,然后他们的兴趣就会下降到代表它的受欢迎程度的水平。

    希望其中一些可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 2013-04-12
      相关资源
      最近更新 更多