servicestack,C#,Design Patterns,Architecture,servicestack" /> servicestack,C#,Design Patterns,Architecture,servicestack" />

C# ServiceStack真的建立在标准之上吗?

C# ServiceStack真的建立在标准之上吗?,c#,design-patterns,architecture,servicestack,C#,Design Patterns,Architecture,servicestack,我不太确定天气DTO应该是POCO,或者它可以依赖于任何技术。我在想,最好将它们作为POCO来支持松耦合,并确保它能与任何技术一起工作 服务堆栈文档中提到: 用于在中定义web服务的请求和响应DTO ServiceStack是标准的POCO,而实现只需要 从可测试且无依赖项的iSeries设备继承。 作为将DTO保存在独立的无依赖性.dll中的奖励, 您可以在提供 没有任何代码的强类型API。还有你的DTO 定义一切服务堆栈不会污染您的web服务 带有任何其他自定义人工制品或标记 但是,如果您看

我不太确定天气DTO应该是POCO,或者它可以依赖于任何技术。我在想,最好将它们作为POCO来支持松耦合,并确保它能与任何技术一起工作

服务堆栈文档中提到:

用于在中定义web服务的请求和响应DTO ServiceStack是标准的POCO,而实现只需要 从可测试且无依赖项的iSeries设备继承。 作为将DTO保存在独立的无依赖性.dll中的奖励, 您可以在提供 没有任何代码的强类型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; }
}
[路线(“/todos”)]
[路由(“/todos/{Ids}”)]
公共类待办事项:IReturn
{
公共长[]标识{get;set;}
公共TODO(参数长[]ID)
{
这个.Ids=Ids;
}
}
[路线(“/todos”,“POST”)]
[路由(“/todos/{Id}”,“PUT”)]
公共类待办事项:IReturn
{
公共长Id{get;set;}
公共字符串内容{get;set;}
公共整数顺序{get;set;}
公共bool Done{get;set;}
}
我对文档中提到的内容和实际实现的内容完全感到困惑。为什么我们需要让数据传输依赖于技术,最好保持它们的清洁和技术独立


我的理解可能完全错误。

任何添加到DTO的元数据属性都存储在dependency and impl free项目中。注释DTO的好处是,DTO可以使用漂亮的URL而不是回退预定义的路由重新使用和调用服务中的自定义路由属性

IReturn
界面标记允许更多

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

public void Configure(Container container)
{
    Routes
      .Add<Todos>("/todos")
      .Add<Todos>("/todos/{Id}")
      .Add<Todo>("/todos", "POST")
      .Add<Todo>("/todos/{Id}", "PUT");
}
public void配置(容器)
{
路线
.Add(“/todos”)
.Add(“/todos/{Id}”)
.Add(“/todos”,“POST”)
.Add(“/todos/{Id}”,“PUT”);
}

与客户共享DTO的最佳方式是什么?因此。。我需要与所有客户端共享DTO DLL。开发人员再次选择将DTO作为POCO或依赖于服务堆栈。为了使客户端代码更简单,建议定义DTO扩展IRetunr,我的理解正确吗?如果您想要一个类型化API,而不需要代码生成器,那么是的,您需要分发dll,以便与包含在中的服务客户端一起使用。
IReturn
标记允许在客户端调用站点中使用更类型化、更简洁的API。当然,如果愿意,您可以不使用DTOs/类型化客户机,只解析json/xml/等,就像您通常希望的任何第三方API一样。