Oop 您将如何为阅读/跟随系统建模?

Oop 您将如何为阅读/跟随系统建模?,oop,model,domain-driven-design,Oop,Model,Domain Driven Design,因此,我有以下域模型: 文章基本上是一篇博客文章,目前是一个实体 现在,我想添加以下功能: 当用户(在其浏览器中)查看文章时,会调用api以“标记”正在阅读的博客文章 现在,如果我做一些计算,我应该能够确定哪些文章还没有读过 当用户对一篇文章发表评论时,会发出一个api调用,以“标记”该博客文章已被遵循 现在,如果我做一些计算,我应该能够确定是否有一些新发布的评论,因为最新的用户的评论文章 基本上,这两个特性(read和follow)共享属性、文章id、用户id和读取/操作日期 注意,如

因此,我有以下域模型:

文章
基本上是一篇博客文章,目前是一个实体

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

  • 当用户(在其浏览器中)查看文章时,会调用api以“标记”正在阅读的博客文章
现在,如果我做一些计算,我应该能够确定哪些文章还没有读过

  • 当用户对一篇文章发表评论时,会发出一个api调用,以“标记”该博客文章已被遵循
现在,如果我做一些计算,我应该能够确定是否有一些新发布的评论,因为最新的用户的评论文章

基本上,这两个特性(read和follow)共享属性、文章id、用户id和读取/操作日期

注意,如果一篇文章被跟随,然后被阅读,那么应该使用阅读日期

因此,我认为我可以使用相同的对象,并添加额外的属性来标记它,如下所示

你有什么设计想法吗


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

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

您还可以研究如何使用Map/Reduce模式,其中有一篇很好的介绍文章,这篇文章与您描述的应用程序域几乎相同(文章、评论等)

至于将文章或评论标记为特定用户阅读的事件,这既不是文章也不是用户的事情。如果您使用的是文档数据库,并且希望针对用户存储这些数据,那么随着时间的推移,它可能会积累相当多的数据,我更倾向于将数据存储在一个新的实体中,或者针对文章(理论上,这将有一个最初的兴趣爆发,他们的兴趣下降到表示其受欢迎程度的水平)

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