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



我不太确定dto是否应该是poco,或者它可以取决于任何技术。我在想,最好把它们作为poco来支持松耦合,并确保它可以与任何技术一起工作。

服务栈文档中提到:

中定义web服务的请求和响应DTOServiceStack是标准的POCO,而实现只需要从可测试且无依赖的IService继承。作为将DTO保存在独立的无依赖的。dll中的奖励,你可以在c#/中重用它们。. NET客户端提供没有任何代码生成的强类型API。还有你的DTO服务栈不会污染您的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依赖技术,最好让他们保持清洁和技术独立。

我的理解可能完全错了。

添加到DTO的任何元数据属性都存储在依赖和不含impl的ServiceStack中。接口的项目。注释dto的好处是c#客户端可以重用新API中的自定义路由属性,并使用漂亮的url调用服务,而不是使用回退的预定义路由。

IReturn<T>接口标记允许更简洁的类型API调用,如本回答所示。

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

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

最新更新