👀 检阅我们的设计
让我们从设计团队为我们提供的音轨页面模型开始。在这里,我们需要显示更多有关音轨的信息,而不是主页上卡片中包含的信息。
除了我们在卡片中拥有的,音轨还需要具备
- 描述
- 查看次数
- 该音轨中包含的模块列表
对于每个模块,我们要
- 标题
- 长度
✍️ 更新架构
让我们打开schema.js
文件,该文件位于 server/src
文件夹中。
我们将从更新 Track
类型开始。我们将添加 description
(它是一个 String
)和 numberOfViews
(一个整数, Int
)。哦,千万不要忘记给我们的 fields一些好的注释!
在模式的 Track
类型内添加以下 字段:
"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
,这是必需的 String
和 length
,这是一个 Int
。我们还将为此类型及其 字段 添加注释。
将以下内容添加到模式的 typeDefs
中:
"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!]!
missions: [Mission!]
,以下哪个语句是真的非常完美,根据我们客户端的需求,我们已经更新了我们的类型。我们是否已完成 schema 定义?还没有结束!目前,我们只拥有一个 tracksForHome
查询,它一次返回所有路径。
在下一课中,我们将使用 参数来更新我们的 schema,以便检索特定路径。
分享您对这一课的问题和评论
您的反馈有助于我们改进!如果您卡住了或感到困惑,请告诉我们,我们会为您提供帮助。所有评论都是公开的,并且必须遵循 Apollo 行为准则。请注意,已解决或已处理的评论可能被删除。
您需要一个 GitHub 帐户才能在下面发表帖子。没有一个吗? 改为在我们的 Odyssey 论坛中发帖。