2013-08-02 37 views
2

我想知道ServiceStack注册路由的最佳做法是什么。使用RouteAttribute的AppHost VS装饰器中的servicestack注册路由

  1. 定义使用Routes.Add航线APPHOST
  2. 使用上RouteAttiribute装饰定义路由DTO的

我看过一些在哪里,在做APPHOST这是可取的,因为它解除夫妻路由定义从DTO的。但我看到的大部分示例都使用装饰器模式。

那哪个更好?是否有任何争论使用一个在另一个之上?

回答

5

装饰具有路线属性的DTO已成为最佳实践SerivceStack's "new API"的发布已经表明了这一点的许多好处,但最重要的是它促进了一个“简洁,类型化,端到端的客户端API”。

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

优势

  • 您可以动态地发现网址消耗仅基于该DTO的端点。
  • 你的消费服务客户端代码(如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中的路由。

+0

+1我特别喜欢ToUrl() – 7wp