gpt4 book ai didi

graphql - Hot Chocolate 中基于注释的 vs 代码优先

转载 作者:行者123 更新时间:2023-12-04 02:26:46 25 4
gpt4 key购买 nike

Code-First 和有什么区别和 Pure Code-FirstAnnotation-Based在 Hot Chocolate 中,以及在 GraphQL 模式视角和 Hot Chocolate 内部,每种编码方法的优缺点是什么?

最佳答案

Pure Code First更名为 Annotation Based .所以这两个是一样的。
这取决于您最终将使用的架构和品味。您不必拘泥于代码优先或基于注释,您也可以混合搭配。
HotChocolate 默认推断所有属性及其类型。意思是,当您返回 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);
}
}
在基于注解的方法中,您可以使用注解来自定义类型:
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);
}

尽管这两种方法同样强大并且具有相同的功能,但使用其中一种方法还是有一定的好处。
如果您无权访问域模型,或者不想向它们添加属性,您可能会发现代码优先方法更易于使用。当您想退出类型推断并指定要在架构中公开哪些字段时,情况也是如此。
如果您先编写代码,则基于注释的方法通常可以保护您需要的大量样板代码。如果您发现自己在 api 上公开的属性比隐藏的属性多,您可能会发现基于注释的方法更优雅。通常,如果您使用注解,您的代码会更少且更清晰
我们经常看到的是两种方法的结合。 GraphQL 域中的所有内容都使用注释并配置域模型,使用代码优先类型。
尽管使用 11.2 中发布的新属性,您甚至不再需要代码优先类型。您还可以使用属性和类型扩展更改、忽略或替换字段。您还可以使用 [UnionType] 定义联合和接口(interface)。或 [InterfaceType] https://chillicream.com/docs/hotchocolate/defining-a-schema/extending-types/

关于graphql - Hot Chocolate 中基于注释的 vs 代码优先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67042561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com