GraphQL:为什么使用对象类型比内联类型更好

阅读时长 5 分钟读完

前言

GraphQL 提供了丰富的类型系统,其中包括了内联类型(Inline Types)和对象类型(Object Types)。在编写 GraphQL 查询时,常常需要使用这两种类型进行数据的组织与查询。本文将介绍 GraphQL 中对象类型的优势以及使用对象类型对与内联类型的比较。

什么是对象类型

在 GraphQL 中,对象类型是一种定义数据的类型。它定义了数据的属性和字段,可以包含其他的类型(包括基本类型和其他对象类型)。通过定义对象类型,我们可以在 GraphQL Schema 中定义一些数据结构,并在查询时进行数据过滤、排序、关联等操作。

下面是一个示例的对象类型定义,它定义了一个用户类型:

在这个定义中,我们定义了一个名为 User 的对象类型,它定义了用户的 id、name、email 和 posts 等属性。其中,id 和 name 是基本类型(Scalar Types),而 posts 是一个另外的对象类型,代表了该用户发布过的所有文章。

为什么使用对象类型更好

1. 可读性更好

使用对象类型可以让查询语句更加清晰、易懂。在 GraphQL 中,查询语句通常由一个或多个字段组成,而这些字段可以对应为一个或多个对象类型。通过对对象类型的使用,我们可以让查询语句更加结构化和易读,例如:

-- -------------------- ---- -------
----- ------------ -------- -
  -------- ---- -
    ----
    -----
    ----- -
      -----
      -------
    -
  -
-

在这个查询语句中,我们通过 user 字段可以获取一个 User 对象,然后通过它的子属性 name、email 和 posts 获取用户的详细信息和所有的文章。这样的查询语句可以非常清晰地表达我们需要获取的数据,而使用内联类型则会让查询语句变得冗长、难以阅读。

2. 可扩展性更强

使用对象类型可以让我们更轻松地扩展 GraphQL 的 Schema。在业务逻辑变化时,我们经常需要增加一些新的属性或类型,这时如果使用内联类型,则需要让所有使用到这些内联类型的地方都进行修改。而如果使用对象类型,则只需要修改对应的对象类型即可,这样就可以非常容易地保持代码的可维护性和可扩展性。

3. 可复用性更好

如果我们需要在多个查询中使用到相同的一些属性,可以轻松地将它们提取为一个对象类型,这样可以在多个查询中重复使用,实现代码的可复用性。例如,我们可以定义一个名为 PageInfo 的对象类型,它包含了分页或其他元信息,然后将其应用到多个查询中,避免了代码的重复性。

4. 模块化开发更友好

使用对象类型是一种更为模块化的开发方式,这样在开发过程中可以更加清晰地定义组件的输入与输出,避免了上下文信息的传递问题。例如在多个组件中都需要通过用户 id 获取对应的文章列表,我们可以将获取文章列表的代码封装到一个名为 getPostsByUserId 的查询请求中,然后在组件中使用 User 对象类型来描述需要查询的用户信息,通过输入 User 对象类型,我们可以在多个组件中直接获取到对应的文章列表,让开发过程变得更加简洁易用。

使用示例

假设我们有以下数据结构:

-- -------------------- ---- -------
----- ----- - -
  -
    --- ----
    ----- -----
    ------ -----------------------
    ------ -
      - --- ---- ------ -------- -------- -------- ------- ------- ---- --
      - --- ---- ------ ------ ------ -------- ------- ----- ------ --
    --
  --
  -
    --- ----
    ----- -----
    ------ -------------------
    ------ -
      - --- ---- ------ ---- ------ -------- ------- --- -------- --
      - --- ---- ------ -------- ---- -------- ------- ------- ------ --
    --
  --
--

我们可以通过以下的 GraphQL Schema 定义:

-- -------------------- ---- -------
---- ---- -
  --- ---
  ------ -------
  -------- -------
-

---- ---- -
  --- ---
  ----- -------
  ------ -------
  ------ --------
-

---- ----- -
  -------- ----- ----
-

查询语句如下:

-- -------------------- ---- -------
----- ------- -
  -------- ---- -
    --
    ----
    -----
    ----- -
      --
      -----
      -------
    -
  -
-

执行结果如下:

-- -------------------- ---- -------
-
  ------- -
    ------- -
      ----- ----
      ------- -----
      -------- -----------------------
      -------- -
        -
          ----- ----
          -------- -------- --------
          ---------- ------- ------- ----
        --
        -
          ----- ----
          -------- ------ ------
          ---------- ------- ----- ------
        -
      -
    -
  -
-

总结

在 GraphQL 中,对象类型是一种非常重要的类型,它提供了一种清晰、易读、易扩展和可复用的开发方式。通过使用对象类型,我们可以更好地组织和查询数据,让 GraphQL Schema 变得更加清晰、易维护和易扩展。在实际开发中,我们应该积极采用对象类型,以提高代码的可读性、可维护性和可扩展性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a0d7dd48841e9894d1ec10

纠错
反馈