gpt4 book ai didi

asp.net - servicestack使用RouteAttribute在AppHost VS装饰器中注册路由

转载 作者:行者123 更新时间:2023-12-02 21:54:29 25 4
gpt4 key购买 nike

我想知道 ServiceStack 注册路由的最佳实践是什么。

  1. 在 AppHost 中使用 Routes.Add 定义路由
  2. 使用 DTO 上的 RouteAttiribute 装饰器定义路由

我读过一些在 AppHost 中执行此操作更好的地方,因为它将路由定义与 DTO 分离。但我看到的大多数示例都使用装饰器模式。

那么哪个更好呢?是否有任何理由使用其中一种而不是另一种?

最佳答案

用路由属性装饰 DTO 已成为最佳实践SerivceStack's "new API"的发布已经指出了这样做的许多好处,但最重要的是它促进了更“简洁、类型化、端到端客户端 API”。

除了使用 IReturn 之一标记您的 DTO 之外,还可以使用路由属性, IReturn<T>IReturnVoid接口(interface),您可以使用 ServiceStack 现在提供的全部功能。

优点

  • 您可以仅根据 DTO 动态发现用于使用端点的 URL。
  • 您的消费服务客户端代码(如果是 c#)变得更加强类型,并且更改现有路由/DTO 变得微不足道
  • 保持 AppHost 干净、纤薄。我相信 AppHost 中的代码越少越好。
  • 代码可以变得更易于测试
  • 与在 AppHost 中添加路由一起使用(您不必只选择一个)
  • 最重要的是,这一切都很有效!

对于给定的 DTO,您可以使用 ToUrl 扩展方法通过发现属性来生成路由。

[Route("/route/{Id}/{Name}")]
public class ExampleDTO : IReturn
{
public int Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}

var url = new ExampleDTO() { Id = 1, Name = "Test", Value = "Foo" }.ToUrl("GET");
// generates /route/1/Test?value=Foo

服务客户端将在幕后完成所有这些工作。您的消费代码可以变成:

ExampleDTO response  = new JsonServiceClient(“http://api.com/)
.Get(new ExampleDTO() { Id = 1, Name = "Test", Value = "Foo" });

解耦怎么样?我认为没有必要将 DTO 与路由分离。我希望我的开发人员同事知道,在不更改路由的情况下不应更改请求。我见过很多运行时错误,因为我在更改 DTO 后忘记更新 AppHost 中的路由。

关于asp.net - servicestack使用RouteAttribute在AppHost VS装饰器中注册路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18011026/

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