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,它是一个必需的 String,还有一个 length,它是一个 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 之后添加另一个感叹号。

将以下 添加到我们架构的 Track 类型中:

"The track's complete array of Modules"
modules: [Module!]!
给定此架构字段:missions: [Mission!],以下哪个陈述是正确的

很好,我们根据客户的需求更新了类型。我们完成了架构定义吗?还没有!目前,我们只有一个 tracksForHome ,它一次性返回所有轨道。

在下节课中,我们将更新我们的架构,使用 来检索特定轨道。

上一步

分享您关于本课的疑问和评论

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

您需要一个 GitHub 帐户才能在下面发布。没有帐户? 请在我们的奥德赛论坛中发布。