操作模型配置
为项目配置操作模型
操作模型为您项目中的每个GraphQL定义生成。这些模型用于执行使用ApolloClient
的操作,并包含响应模型以访问这些操作返回的数据。
您想如何组织这些操作模型,这将决定它们在项目中应该位于哪里。您可以使用代码生成配置中的output.operations
属性进行配置。
在本节中,我们将考虑如何使用生成的操作模型,并回答以下问题:
你的生成的操作模型应该放在哪里?
通常,您将在以下两种方法之间做出选择:受约束模型或共享模型。
ⓘ 注意
您的操作模型无论在哪里,都必须能够访问您的模式类型和ApolloAPI
目标才能成功编译。
受约束模型
如果您想按特定功能区域或模块组织生成的模型,请使用OperationsFileOutput.relative(subpath: String?)
值设置output.operations
属性。代码生成引擎现在会根据定义它们的.graphql
文件生成操作模型。
此选项为您提供操作模型的最大灵活性和控制权限。您可以通过组织项目结构中的 .graphql
操作定义生成它们,可在项目结构的任何位置生成。
使用相对路径,您可以
- 将与特征代码相关联的模型与特征代码存放在一起
- 将模型包含在项目中的不同模块中
- 根据特征区域组织模型
- 或采用您项目所需的任何其他结构
ⓘ 注意
当在多模块项目配置中包含操作模型时,务必确保任何包含操作模型的模块都链接到 两者:您的 模式类型模块 和 ApolloAPI
库。
在模块间共享片段
当在一个具有约束操作模型的多模块项目配置中工作时,您可能希望在不同模块中的多个操作(或其他片段)间共享片段模型。这可以通过使用 @import(module: String!)
客户端指令 完成。
此 指令 可以应用于其 .graphql
文件中的任何 GraphQL 定义,这将为指定的模块名在定义生成的 Swift 文件顶部添加一个 import
语句。
使用 .relative(subpath:)
操作,您可以将共享的片段放置在一个可以被依赖定义之间共享的模块中。请确保包含您的依赖定义的模块已链接到包含您的片段的模块。然后,您可以使用 @import(module: String!)
客户端指令 在生成的操作模型文件中导入该模块。
共享模型
您还可以在项目的模块间共享生成的操作模型。您可以通过将它们包含在共享的方案类型模块中或在另一个共享模块中手动包含它们来实现这一点。
在共享方案类型模块中打包
对于大多数小型项目,在共享方案类型模块内包含操作模型是共享它们的最直接方式。在这个结构中,操作模型位于模式类型模块目录的子文件夹中。
您可以使用 .inSchemaModule
选项为 output.operations
属性执行此操作:
- 如果您有一个方案模块,代码生成引擎会将您的操作包含在该模块中,然后您可以将其导入到项目的其他模块中。
- 如果您将方案嵌入到另一个目标 中,代码生成引擎会将您的操作包含在应用程序目标中生成的方案名称空间中。
绝对路径
您还可以使用以下操作模型选项将操作模型生成到单个目录:.absolute(path:=)
。然后,您可以按需手动将该目录包含到项目中。
如果您选择将操作模型生成到绝对路径,您需要负责链接生成的文件到项目其他部分。您必须确保所有由操作模型包含的目标都链接到您的模式类型模块和ApolloAPI
库。