Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Graphql获取父链路中的各节点数据 #87

Open
wangyuheng opened this issue Jan 26, 2021 · 6 comments
Open

Graphql获取父链路中的各节点数据 #87

wangyuheng opened this issue Jan 26, 2021 · 6 comments
Assignees
Labels
discuss enhancement New feature or request
Milestone

Comments

@wangyuheng
Copy link
Owner

现状

举例为3层实体结构 Project 1->N Milestone 1->N Task。

在Task的操作中,可以通过env.getSource()获取 Milestone,但是无法获取Project的信息。

在约定中,认为任意子节点可以获取其与聚合根的路径节点中的数据。

期望

可以在当前节点获取父节点&父节点的父节点的数据

@wangyuheng wangyuheng added enhancement New feature or request discuss labels Jan 26, 2021
@wangyuheng wangyuheng added this to the 1.6.0 milestone Jan 26, 2021
@lozybean
Copy link

  • 增强graphql描述聚合关系语义的能力,可能的方案是增加一个directive
  • 增强DataFetchingEnvironment接口,增加 getParentSource 接口;
  • 简单实现:在preHandle中解析parent并将其设置在context中,并通过解析directive获取到上一级路径的节点的名称,获取context其中的值
  • 局限性:该实现不支持继承链中的名称重复

@lozybean
Copy link

还需要一个描述值对象的directive

@wangyuheng
Copy link
Owner Author

image

@wangyuheng
Copy link
Owner Author

举例场景

  1. 一个Project下有多个Milestone
  2. 一个Milestone下有多个Task
  3. 查询: Milestone下的Tasks
  4. 查询: Project下的Tasks

明确2个概念

  1. 路径: 指实际请求中Graphql经过的方法,比如 Project->Milestone->Task or Project->Task。 此时Task的parent是不同的,即 getSource()
  2. Parent: 领域中关系。在领域设计中,认为Task属于Milestone 则 通过Project->Task查询时,getParent()获取到的也是对应的Milestone

@wangyuheng
Copy link
Owner Author

wangyuheng commented Jan 28, 2021

扩展问题

约束问题

  1. 一个type 是否允许有多个Parent
  2. 一个type 能否被多个type引用
  3. 如果内部实体也提供了相应方法,则需要根据聚合根找到实体,再进行方法调用。这样是不是破坏了聚合根的封装?

声明问题

  1. 是否需要区分 实体、聚合根和值对象? -> 是否所有type都可以指定Parent

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discuss enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants
@wangyuheng @lozybean and others