我想知道ServiceStack注册路由的最佳做法是什么。使用RouteAttribute的AppHost VS装饰器中的servicestack注册路由
- 定义使用Routes.Add航线APPHOST
- 使用上RouteAttiribute装饰定义路由DTO的
我看过一些在哪里,在做APPHOST这是可取的,因为它解除夫妻路由定义从DTO的。但我看到的大部分示例都使用装饰器模式。
那哪个更好?是否有任何争论使用一个在另一个之上?
我想知道ServiceStack注册路由的最佳做法是什么。使用RouteAttribute的AppHost VS装饰器中的servicestack注册路由
我看过一些在哪里,在做APPHOST这是可取的,因为它解除夫妻路由定义从DTO的。但我看到的大部分示例都使用装饰器模式。
那哪个更好?是否有任何争论使用一个在另一个之上?
装饰具有路线属性的DTO已成为最佳实践。 SerivceStack's "new API"的发布已经表明了这一点的许多好处,但最重要的是它促进了一个“简洁,类型化,端到端的客户端API”。
除了使用IReturn
,IReturn<T>
或IReturnVoid
接口之一标记您的DTO以外,还可以使用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中的路由。
+1我特别喜欢ToUrl() – 7wp