Zah*_*yat 5 graphql hotchocolate
Hot Chocolate中的Code-Firstand Pure Code-Firstor之间有什么区别?这些编码方法在 GraphQL 模式角度和 Hot Chocolate 内部有何优缺点?Annotation-Based
Pure Code First被更名为Annotation Based. 所以这两个是一样的。
这取决于您最终将使用的架构和品味。您不必首先局限于代码或基于注释,您还可以混合搭配。
HotChocolate 默认推断所有属性及其类型。这意味着,当您返回 a 时,User它会自动为其创建一个类型,其中包含用户拥有的所有属性。如果您想更改类型的配置,您可以使用注释或创建一个 ObjectType`
在底层,所有方法(甚至模式优先)都具有相同的表示。它们都被转化为code-first方法。
在代码优先方法中,您使用类型继承和流畅的 API 来配置类型
public class User
{
public string Id {get; set}
}
public class UserType : ObjectType<User>
{
protected override void Configure(IObjectTypeDescriptor<User> descriptor)
{
descriptor.Field(x => x.Id).Type<IdType>();
descriptor.Field<Resolvers>(x => x.GetAddressAsync(default, default));
}
public class Resolvers
{
public Task<Address> GetAddressAsync(
[Parent]User user,
[Service]AddressRepo repo) => repo.GetAddressByUserAsync(user.Id);
}
}
Run Code Online (Sandbox Code Playgroud)
在基于注释的方法中,您可以使用注释来自定义类型:
public class User
{
[GraphQLType(typeof(IdType))]
public string Id {get; set}
}
[ExtendObjectType(nameof(User))]
public class UserAddressExtensions
{
public Task<Address> GetAddressAsync(
[Parent]User user,
[Service]AddressRepo repo) => repo.GetAddressByUserAsync(user.Id);
}
Run Code Online (Sandbox Code Playgroud)
尽管这两种方法同样强大并且具有相同的功能,但使用其中一种方法比另一种方法有一定的好处。
如果您无权访问域模型,或者不想向它们添加属性,您可能会发现代码优先方法更容易使用。当您想要选择退出类型推断并指定要在架构中公开哪些字段时,情况也是如此。
基于注释的方法通常可以保存大量样板代码,如果您首先编写代码,则需要这些样板代码。如果您发现自己在 api 上公开的属性多于隐藏的属性,您可能会发现基于注释的方法更加优雅。如果使用注释,通常您的代码会更少、更干净
我们经常看到的是这两种方法的结合。如果 GraphQL 域中的所有内容都使用注释并配置域模型,则使用代码优先类型。
尽管使用 11.2 中发布的新属性,您甚至不再需要代码优先类型。您还可以更改、忽略或替换具有属性和类型扩展的字段。您还可以使用 https://chillicream.com/docs/hotchocolate/defining-a-schema/extending-types/ 定义联合[UnionType]和[InterfaceType]
接口
基于注释或纯代码优先:在这种方法中,我们不必担心 GraphQL 模式类型,我们只需编写自动转换为 GraphQL 类型的干净 C# 代码。
代码优先:在这种方法中,我们使用Schema 类型Schema types,使我们能够将 GraphQL 类型配置与 .NET 类型分开。当我们不希望业务对象上有任何热巧克力属性时,这可能是正确的方法。
| 归档时间: |
|
| 查看次数: |
2313 次 |
| 最近记录: |