我不太确定天气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依赖于技术,更好地保持它们的清洁和技术独立。
我的理解可能完全错误。
答案 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");
}