2. 更新我们的架构
3m
你当前处于本课程的较旧版本。 查看课程变更日志.

👀 检阅我们的设计

让我们从设计团队为我们提供的音轨页面模型开始。在这里,我们需要显示更多有关音轨的信息,而不是主页上卡片中包含的信息。

A mockup of the Track page showing a track thumbnail, title, and data about its modules

除了我们在卡片中拥有的,音轨还需要具备

  • 描述
  • 查看次数
  • 该音轨中包含的模块列表

对于每个模块,我们要

  • 标题
  • 长度

✍️ 更新架构

让我们打开schema.js文件,该文件位于 server/src文件夹中。

我们将从更新 Track类型开始。我们将添加 description(它是一个 String)和 numberOfViews(一个整数, Int)。哦,千万不要忘记给我们的 一些好的注释!

在模式的 Track 类型内添加以下

server/src/schema.js
"The track's complete description, can be in Markdown format"
description: String
"The number of times a track has been viewed"
numberOfViews: Int

接下来,我们应该如何处理轨道的模块?

从商业的角度来看,假设模块应是一个独立类型似乎是合理的:单个轨道可能包括任意数量的模块,并且一个模块可能是多个轨道的组成部分。因此,我们将创建一个单独的 Module 类型。

模块有一个 id,它是必需的。它还具有 title,这是必需的 Stringlength,这是一个 Int。我们还将为此类型及其 添加注释。

将以下内容添加到模式的 typeDefs 中:

server/src/schema.js
"A Module is a single unit of teaching. Multiple Modules compose a Track"
type Module {
id: ID!
"The Module's title"
title: String!
"The Module's length in minutes"
length: Int
}
创建单独的 Module 类型的理由有哪些?

既然我们有 Module 类型,我们返回到 Track 轨道类型。

我们知道 Track 可以有许多模块,因此我们来向 Track 添加一个 称为 modules,它返回一个 Module 对象数组。该数组不能为 null,因此我们在末尾添加一个叹号,并且数组中的条目也不能为 null,因此我们 Module 之后添加另一个叹号。

将以下 添加到我们 schema 的 Track 类型:

"The track's complete array of Modules"
modules: [Module!]!
给出此 schema 字段: missions: [Mission!],以下哪个语句是真的

非常完美,根据我们客户端的需求,我们已经更新了我们的类型。我们是否已完成 schema 定义?还没有结束!目前,我们只拥有一个 tracksForHome ,它一次返回所有路径。

在下一课中,我们将使用 来更新我们的 schema,以便检索特定路径。

上一个

分享您对这一课的问题和评论

您的反馈有助于我们改进!如果您卡住了或感到困惑,请告诉我们,我们会为您提供帮助。所有评论都是公开的,并且必须遵循 Apollo 行为准则。请注意,已解决或已处理的评论可能被删除。

您需要一个 GitHub 帐户才能在下面发表帖子。没有一个吗? 改为在我们的 Odyssey 论坛中发帖。