GraphQL:建模演化类型/状态转换
GraphQL: Modeling evolving types / state transitions
这个问题我们已经 运行 多次解决了...非常期待其他人的意见!
场景描述(用于说明目的):
有人访问我们的网站,也许他们填写了一些表格,等等。对我们来说,这个人就是一个prospect/lead。他们还没有完全成为客户;他们只是潜在 未来客户。
可以对这些 Prospects
执行某些操作,例如将某些数据添加到他们的个人资料中。我们称之为 add_foobar_data
。当然,如果他们成为 真正的 客户(有人消费我们的服务),我们仍然需要能够 add/remove 从他们的帐户中获取上述数据。
场景 (tl;dr):
Prospects
可以变成Customers
- 突变
add_foobar_data
概念上 适用于 Prospects
和 Customers
Prospects
只有Customers
的一个数据子集(它们是真正的子集;目前Customers
有很多不可为空的字段Prospects
没有有)
选项:
创建联合类型,例如Customerable
。 add_foobar_data
会 return 一个 Customerable
(或对 Customerable
的反向引用)而不是特定类型。
创建单独的突变来修改 Prospects
和 Customers
(add_foobar_data_to_prospect
, add_foobar_data_to_customer
)
人人都是Customer
!使 Customer
上所有那些不在 Prospect
中的不可空字段都可以为空,并添加一个名为 isProspect
的新标志(或者 isDraft
如果我们想改变我们的想法流量)。
也许还有其他我没想到的方法...
有人想过解决这种情况的最佳方法是什么吗?为什么?
最终使用了 Interface,因为 Prospect
是 Customer
的直接子集,并非巧合。
这个问题我们已经 运行 多次解决了...非常期待其他人的意见!
场景描述(用于说明目的):
有人访问我们的网站,也许他们填写了一些表格,等等。对我们来说,这个人就是一个prospect/lead。他们还没有完全成为客户;他们只是潜在 未来客户。
可以对这些 Prospects
执行某些操作,例如将某些数据添加到他们的个人资料中。我们称之为 add_foobar_data
。当然,如果他们成为 真正的 客户(有人消费我们的服务),我们仍然需要能够 add/remove 从他们的帐户中获取上述数据。
场景 (tl;dr):
Prospects
可以变成Customers
- 突变
add_foobar_data
概念上 适用于Prospects
和Customers
Prospects
只有Customers
的一个数据子集(它们是真正的子集;目前Customers
有很多不可为空的字段Prospects
没有有)
选项:
创建联合类型,例如
Customerable
。add_foobar_data
会 return 一个Customerable
(或对Customerable
的反向引用)而不是特定类型。创建单独的突变来修改
Prospects
和Customers
(add_foobar_data_to_prospect
,add_foobar_data_to_customer
)人人都是
Customer
!使Customer
上所有那些不在Prospect
中的不可空字段都可以为空,并添加一个名为isProspect
的新标志(或者isDraft
如果我们想改变我们的想法流量)。也许还有其他我没想到的方法...
有人想过解决这种情况的最佳方法是什么吗?为什么?
最终使用了 Interface,因为 Prospect
是 Customer
的直接子集,并非巧合。