2012-11-30 59 views
7

我們正在構建我們的ServiceStack的第一個小實現,我們需要對位於客戶端和服務器之間共享的單獨程序集中的DTO進行一些說明。ServiceStack DTO彙編

The WIKI page for the new API建議DTO

下在服務發展你的服務的DTO提供要保持清潔,併爲「依賴性的自由」,儘可能爲最大的可訪問性和潛在的重新您的技術無關的服務層-使用。我們的建議是將您的服務DTO保存在一個單獨的大部分免費的程序集中。

也有此片段

*但是,假設你需要複製的DTO的正常路線(以二進制形式的任何來源),所以你有這樣的事情在客戶端上:

[Route("/reqstars")] 
public class AllReqstars : IReturn<List<Reqstar>> { } 

The code on the client now just becomes: 

var client = new JsonServiceClient(BaseUri); 
List<Reqstar> response = client.Get(new AllReqstars()); 

這點讓GET web請求到/ reqstars路線。當客戶端上沒有自定義路由時,它會自動回退到使用ServiceStack的預定義路由。

我的問題是......由於DTO類的路由屬性,「大部分無需釋放」的程序集仍然需要依賴於ServiceStack嗎?

回答

7

[Route]屬性存在於ServiceStack.Interfaces項目,所以你仍然只需要依賴並實現了一套無ServiceStack.Interfaces.dll參考。這是設計的,我們希望確保儘可能少的依賴性,這就是爲什麼我們會盡量保留您可能在Interfaces項目中使用DTO的所有元數據屬性。

之所以希望保持您的DTO在一個單獨的組件,以降低成本,以使用它你的客戶所需要的依賴關係。這使得客戶的侵入性更小,更易於訪問。此外,您的DTO代表您的服務合同,保持其獨立性,鼓勵他們脫離實施的良好實踐,您希望繼續自由地重新考慮實施。

+1

謝謝mythz。我全部贊成將DTO保存在一個單獨的程序集中,但我不確定是否有一種方法可以使程序集零點歸零。 –

+0

@mythz我對ServiceStack很敬畏,並且信息量(很多矛盾)有點不知所措。這個答案幫助我在正確的軌道上用我的DTO創建一個ServiceModel DLL,但是我沒有在ServiceStack的文檔上找到任何指向它的東西。沒有任何地方指出唯一需要的引用是ServiceStack.Interfaces。 RESTIntro ServiceModel包含對大量DLL的引用,所以它也很混亂。是否有nuget包只獲得這個最小的引用來構建ServiceModel? – Loudenvier

+1

@Loudenvier ServiceStack.Interfaces位於ServiceStack.Common NuGet包中,NuGet目前沒有更好的細節(在NuGet的重新設計之後會有更多細節)。在實踐中,這不是問題,因爲ServiceStack.Common是客戶端使用[ServiceStack鍵入的.NET客戶端]所需的最小包(https://github.com/ServiceStack/ServiceStack/wiki/C% 23客戶端)。一般來說,您應該努力保持您的服務模式不受干擾,最大限度地減少客戶所需的代價/摩擦。 – mythz