GraphQL:建模演化类型/状态转换

GraphQL: Modeling evolving types / state transitions

这个问题我们已经 运行 多次解决了...非常期待其他人的意见!


场景描述(用于说明目的):

有人访问我们的网站,也许他们填写了一些表格,等等。对我们来说,这个人就是一个prospect/lead。他们还没有完全成为客户;他们只是潜在 未来客户。

可以对这些 Prospects 执行某些操作,例如将某些数据添加到他们的个人资料中。我们称之为 add_foobar_data。当然,如果他们成为 真正的 客户(有人消费我们的服务),我们仍然需要能够 add/remove 从他们的帐户中获取上述数据。


场景 (tl;dr):


选项:

  1. 创建联合类型,例如Customerableadd_foobar_data 会 return 一个 Customerable(或对 Customerable 的反向引用)而不是特定类型。

  2. 创建单独的突变来修改 ProspectsCustomers (add_foobar_data_to_prospect, add_foobar_data_to_customer)

  3. 人人都是Customer!使 Customer 上所有那些不在 Prospect 中的不可空字段都可以为空,并添加一个名为 isProspect 的新标志(或者 isDraft 如果我们想改变我们的想法流量)。

  4. 也许还有其他我没想到的方法...


有人想过解决这种情况的最佳方法是什么吗?为什么?

最终使用了 Interface,因为 ProspectCustomer 的直接子集,并非巧合。