gpt4 book ai didi

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

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

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

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

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

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

最佳答案

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

除了使用 IReturn 之一标记您的 DTO 之外,还使用 ​​Route 属性, 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

ServiceClients 将在幕后完成所有这些工作。您的消费代码可以变成:

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