2012-11-30 26 views
7

ServiceStack'ın ilk küçük uygulamasını oluşturuyoruz ve istemci ile sunucu arasında paylaşılan ayrı bir derlemede bulunan DTO'larla ilgili bazı açıklamalara ihtiyacımız var.ServiceStack DTO Assembly

The WIKI page for the new API hizmetlerinizin DTOs temiz tutmak ve maksimum erişilebilirlik ve potansiyel yeniden için mümkün olduğunca 'bağımlılık-ücretsiz' olarak istediğiniz teknoloji agnostik Servis Katmanı sağlayan Servis gelişmede DTO

için aşağıdaki önerir -kullanır. Tavsiyemiz, servis DTO'larınızı ayrı ve büyük ölçüde ücretsiz bir montajda tutmaktır.

de bu pasajı

* Ama sen (ikili formun kaynağı biriyle) DTOs kopyalama normal yol almak böylece istemci üzerinde böyle bir şey var diyelim yok:

[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()); 
/reqstars yönlendirmek için bir GET web istekte

. İstemcide özel bir rota olmadığında, ServiceStack'ın önceden tanımlanmış rotalarını kullanmaya otomatik olarak geri döner.

Sorum "büyük ölçüde dep-özgür" montaj hala DTO sınıfları üzerinde rota özniteliği nedeniyle ServiceStack bir bağımlılık gerektirir ... nedir?

cevap

7

[Route] nitelik ServiceStack.Interfaces projede var, bu yüzden hala sadece bağımlılık ve impl içermeyen ServiceStack.Interfaces.dll bir başvuru gerekiyor. Bu, tasarım gereği mümkün olduğunca minimum bağımlılığı sağlamak istiyoruz; bu nedenle, arayüzler projesinde DTO'larda kullanabileceğiniz tüm meta veri özelliklerini tutmaya çalışacağız.

DTO'larınızı ayrı bir toplantıda tutmak istemenin nedeni, müşterilerinizin kullanması için gereken bağımlılıkları azaltmaktır. Bu, istemciler için daha az invaziv ve daha erişilebilir hale getirir. Ayrıca, DTO'larınız Hizmet Sözleşmenizi de temsil eder, bunları ayrı ayrı uygulamalardan ayırma pratiğini teşvik eder ve yeniden değerlendirmek için ücretsiz olmaya devam etmek istersiniz.

+1

Teşekkür ederim mythz. DTO'ları ayrı bir mecliste tutmanın lehindeyim, bu sıfır montajı yapmak için bir yöntem olup olmadığından emin değildim. –

+0

@mythz Ben ServiceStack hayranıyım ve biraz bilgi (birçok çelişkili) tarafından boğulmuş. Bu cevap, DTO'larım ile bir ServiceModel dll'si oluşturma konusunda doğru yolda bana yardımcı oldu, ancak ServiceStack'ın bu şekilde işaret ettiği bir şey bulamadım. Tek gerekli referansın ServiceStack.Interfaces olduğunu belirten bir yer yok. RESTIntro ServiceModel, DLL'lerin LOT'larına referanslar içerir, bu yüzden de kafa karıştırıcıdır. ServiceModel oluşturmak için yalnızca bu minimum referansı almak için bir nuget paketi var mı? – Loudenvier

+1

@Loudenvier ServiceStack.Interfaces ServiceStack.Common NuGet paketinde, şu anda NuGet üzerinde daha fazla para cezası yok (büyük NuGet yeniden faktöründen sonra olacak). ServiceStack.Common, istemcilerin [ServiceStack'ın yazdığı .NET İstemcileri] 'ni kullanabilmeleri için gereken minimum paket olduğundan (https://github.com/ServiceStack/ServiceStack/wiki/C% 23-istemci). Genel olarak, servis modellerinizi müşterileriniz için gerekli olan sapmaları/sürtünmeyi en aza indirgemek için ücretsiz olmalısınız. – mythz