2013-05-01 20 views
1

我不太确定天气DTO应该是POCO还是可以依靠任何技术。我在想,最好将它们作为POCO来支持松耦合,并确保它可以与任何技术协同工作。ServiceStack堆栈是否真的建立在标准上?

从服务栈文档中,提到:

的请求和响应DTO的使用 ServiceStack定义的Web服务标准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依赖于技术,更好地保持它们的清洁和技术独立。

我的理解可能完全错误。

回答

3

任何元数据属性被添加到DTO的存储在依赖和无impl ServiceStack.Interfaces项目。注释DTO的好处是可以使用C# clients,它们可以重新使用New API中的自定义路由属性,并使用漂亮的URL调用服务,而不是使用后备预定义的路由。

IReturn<T>界面标记允许更多succinct typed API calls as seen in this answer

你并不需要使用属性,你可以使用ServiceStack的内置流利的API定义定制的路线,e.g:

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

什么是与客户交流的DTO的最佳方式? – Brainchild 2013-05-01 13:45:24

+0

复制DTO dll。 – mythz 2013-05-01 13:48:14

+0

所以..我需要与所有客户共享DTO DLL。 – Brainchild 2013-05-01 13:50:23