ServiceStack堆栈是否真的建立在标准之上?

时间:2013-05-01 07:26:32

标签: c# design-patterns architecture servicestack

我不太确定天气DTO应该是POCO还是依赖于任何技术。我想,最好将它们作为POCO来支持松散耦合,并确保它适用于任何技术。

从服务堆栈文档中提到:

  

请求和响应DTO用于定义Web服务   ServiceStack是标准的POCO,而实现只需要   从可测试和无依赖的IService继承。   作为将DTO保存在单独的无依赖性.dll中的奖励,   您可以在提供a的C#/ .NET客户端中重复使用它们   强类型API,没有任何代码生成器。也是你的DTO   定义所有内容Service Stack不会污染您的Web服务   使用任何其他自定义文物或标记

但是如果你看到DTO的实际实现,它就依赖于服务栈。

[Route("/todos")]
[Route("/todos/{Ids}")]
public class Todos : IReturn<List<Todo>>
{
    public long[] Ids { get; set; }
    public Todos(params long[] ids)
    {
        this.Ids = ids;
    }
}

[Route("/todos", "POST")]
[Route("/todos/{Id}", "PUT")]
public class Todo : IReturn<Todo>
{
    public long Id { get; set; }
    public string Content { get; set; }
    public int Order { get; set; }
    public bool Done { get; set; }
}

我对文档中提到的内容以及实际实现的内容感到困惑。为什么我们需要让DTO依赖于技术,更好地保持它们的清洁和技术独立。

我的理解可能完全错误。

1 个答案:

答案 0 :(得分:3)

添加到DTO的任何元数据属性都存储在依赖项和无impl ServiceStack.Interfaces项目中。注释DTO的好处是C# clients可以使用New API,它们能够重用succinct typed API calls as seen in this answer中的自定义路由属性,并使用漂亮的URL而不是后备预定路由来调用服务。 / p>

IReturn<T>界面标记允许更多{{3}}。

您不需要使用属性,因为您可以使用ServiceStack的内置流畅API来定义自定义路由,例如:

public void Configure(Container container)
{
    Routes
      .Add<Todos>("/todos")
      .Add<Todos>("/todos/{Id}")
      .Add<Todo>("/todos", "POST")
      .Add<Todo>("/todos/{Id}", "PUT");
}