2013-05-01 47 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