2.3.6 列表以及对象的列表

需求 希望用户可以支持多个昵称。

当需要表达一组同类数据时,就需要用上列表了。比如一个人的姓名只有一个,但是却可以有很多个绰号或者昵称。可以使用方括号加类型名来表达这种一对多的数据关系:

可以自由地在上面定义的nickname[String]中存储多个、一个甚至是零个字符串作为该用户的昵称。

需求 每个用户可以有自己的商品收藏夹。

现在来设计一个用户收藏夹的功能,具体来说,就是一个用户可以收藏多个商品。代码如下:

可能有的读者会提出使用favorites:[ID]这样的设计,使用商品的ID列表来代替商品本身数据的列表。这样做的好处是可以减少后端存储和网络传输的数据量,坏处是客户端得到了ID列表,可能还需要再次请求服务器来获得所需的具体产品信息。哪种设计更好呢?选择之前先来学习以下两个知识点:

首先,GraphQL中定义的数据模型并不等于数据存储模型,在实际向数据库中存储数据时,可以通过灵活的后端实现只保存商品的ID。

其次,如果客户端的确是只需要商品ID而不是整个商品,则可以通过定制返回字段的方式来达到网络传输数据量最小化的目的。

所以选择favorites:[Product]作为数据类型最为合适。