我想知道 ServiceStack 注册路由的最佳实践是什么。
- 在 AppHost 中使用 Routes.Add 定义路由
- 使用 DTO 上的 RouteAttiribute 装饰器定义路由
我已经阅读了一些在 AppHost 中执行此操作更可取的地方,因为它将路由定义与 DTO 分离。但是我看到的大多数例子都是使用装饰器模式。
那么哪个更好呢?有什么论据可以使用其中一个吗?
我想知道 ServiceStack 注册路由的最佳实践是什么。
我已经阅读了一些在 AppHost 中执行此操作更可取的地方,因为它将路由定义与 DTO 分离。但是我看到的大多数例子都是使用装饰器模式。
那么哪个更好呢?有什么论据可以使用其中一个吗?
用路由属性装饰您的 DTO 已成为最佳实践。SerivceStack 的“新 API”的发布表明了它的许多好处,但最重要的是它促进了更“简洁、类型化、端到端的客户端 API”。
IReturn
除了使用、IReturn<T>
或接口之一标记您的 DTO 之外,通过使用 Route 属性,IReturnVoid
您可以使用 ServiceStack 现在提供的全部功能。
优点
对于给定的 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 中的路由。