star系统升级方案

[!NOTE] star系统在之前一直由logservice承担,我们每次对star的查询实际上是查询用户star的log。这样设计存在若干好处:

  • 节约空间

  • 实现简便

但是这种做法也带来了一些问题,比如:

  • 难以加入搜索功能

  • 难以完成用户可以公开自己的收藏夹的功能

升级方法

新增一个查询服务,叫StarService,专门处理可公开的收藏夹。它并不取代logservice的功能,而是与之合作。
在普通的不可公开的收藏夹中,直接使用logservice完成任务。而在需要可公开收藏夹的任务中,使用starservice来处理。starservice初始化需要接收一个logservice,它本身继承EsDBqueryService,它自己的collection中保存收藏夹名称、封面图、拥有者id、保护等级四个主要信息,并对logservice的star能力进行进一步封装。

[!IMPORTANT] 注意,在star service中只保存创建者id,不保存用户其他信息。因为用户一旦修改账号信息这里的信息就过期了。这里存id只是因为一个具体的collection需要创建者id和collectionname才能确定。

附参考StarModel:

public class StarModel: Entity
{
    public Guid CreatorId { get; set; }
    public string ColName { get; set; }
    public ArticleVisibility Visibility { get; set; }
    public string CoverUrl { get; set; }
}

参考UML

classDiagram
EsDbQueryService <|-- StarService : Inherit
StarService: LogService logger
StarService: IDBqueryServiceSlim entityQueryService
StarService: GetStaredEntities(int page, int pagesize, string orderby...)
StarService: CreateCol(string name, string cover, Guid creator)
StarService: DeleteCol(Guid colid)

本文章使用limfx的vsocde插件快速发布