[!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插件快速发布