在我的应用中,我有警报。部分架构:
type Alert {
id: ID!
users: [User]
}
type User {
id
username
... many more calculated fields
}
每个警报可以返回User
的列表。这种User
类型的构建在计算上非常昂贵,我们实际上只需要几个用户字段即可显示警报。但是,如果我们仅部分构建用户对象,则Apollo将缓存这些部分用户对象,并破坏依赖于“完整” User
对象的应用程序的其他部分。避免这种情况需要fetchPolicy: "no-cache"
,我想保留该缓存。
因此,我试图避免仅为了支持User
而返回整个Alert
对象。我也遇到过其他类型的问题,并且正在努力为这种情况设计最佳方法。我想出的唯一解决方案是创建“部分类型”,这将是带有字段子集的单独类型。例如:
type Alert {
id: ID!
users: [PartialUser]
}
type PartialUser {
id
username
name
}
这感觉很骇人,就像它违反了DRY原则。
另一种方法可能是在查询后手动更新缓存。这样可以避免部分User
对象的缓存,但是仍然让人感到不舒服。我还认为只有突变支持options.update
方法来操作缓存。因此,我有些困惑,并且在文档中找不到任何指导。
是否有解决此问题的建议?