2012-11-30 37 views
7

Chúng tôi đang xây dựng triển khai nhỏ đầu tiên của ServiceStack và chúng tôi cần một số làm rõ về DTO nằm trong một hội đồng riêng biệt được chia sẻ giữa khách hàng và máy chủ.ServiceStack DTO Assembly

The WIKI page for the new API khuyến cáo sau đây cho DTO

Trong phát triển Dịch vụ DTOs dịch vụ của bạn cung cấp công nghệ dịch vụ bất khả tri lớp của bạn mà bạn muốn giữ sạch và là 'phụ thuộc-miễn phí' càng tốt cho khả năng tiếp cận tối đa và tái tiềm năng -sử dụng. Đề xuất của chúng tôi là giữ cho DTO dịch vụ của bạn trong một hội nghị riêng hoàn toàn miễn phí.

Ngoài ra còn có đoạn này

* Nhưng giả sử bạn đi theo con đường bình thường của sao chép DTOs (trong cả hai nguồn gốc của dạng nhị phân), do đó bạn có một cái gì đó như thế này trên máy khách:

[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()); 

Mà làm cho một yêu cầu web GET để con đường/reqstars. Khi một tuyến đường tùy chỉnh không xuất hiện trên máy khách, nó sẽ tự động quay trở lại sử dụng các tuyến được xác định trước của ServiceStack.

Câu hỏi của tôi là ... hội đồng "phần lớn không có phụ thuộc" vẫn yêu cầu phụ thuộc vào ServiceStack do thuộc tính tuyến đường trên các lớp DTO?

Trả lời

7

Các [Route] thuộc tính tồn tại trong dự án ServiceStack.Interfaces, vì vậy bạn vẫn chỉ cần một tham chiếu đến sự phụ thuộc và impl miễn ServiceStack.Interfaces.dll. Điều này là do thiết kế, chúng tôi muốn đảm bảo sự phụ thuộc tối thiểu nhất có thể, đó là lý do tại sao chúng tôi sẽ cố gắng giữ tất cả các thuộc tính siêu dữ liệu mà bạn có thể sử dụng trên DTO trong dự án Giao diện.

Lý do muốn giữ DTO của bạn trong một hội đồng riêng biệt là giảm các phụ thuộc theo yêu cầu của khách hàng của bạn để sử dụng nó. Điều này làm cho nó ít xâm lấn và dễ tiếp cận hơn cho khách hàng. Ngoài ra DTO của bạn đại diện cho Hợp đồng dịch vụ của bạn, giữ cho chúng riêng biệt khuyến khích thực hành tốt tách chúng khỏi việc triển khai, mà bạn muốn tiếp tục được tự do để tái yếu tố.

+1

Cảm ơn bạn mythz. Tôi tất cả đều có lợi cho việc giữ DTO trong một hội đồng riêng biệt, tôi chỉ không chắc chắn nếu có một phương pháp để làm cho hội đồng đó zero-dep. –

+0

@mythz Tôi rất kinh ngạc về ServiceStack và một chút bị choáng ngợp bởi lượng thông tin (nhiều mâu thuẫn). Câu trả lời này đã giúp tôi đi đúng hướng để tạo ra một dll ServiceModel với DTO của tôi nhưng tôi không tìm thấy bất cứ điều gì trên doc của ServiceStack chỉ nó theo cách đó. Không có nơi nào ở đó nói rằng tham chiếu chỉ cần thiết là ServiceStack.Interfaces. RESTIntro ServiceModel bao gồm các tham chiếu đến LOTs của DLL, vì vậy nó cũng gây nhầm lẫn. Có một gói nuget để có được chỉ tham chiếu tối thiểu này để xây dựng một ServiceModel? – Loudenvier

+1

@Loudenvier ServiceStack.Interfaces nằm trong gói ServiceStack.Common NuGet, không có gì tốt hơn trên NuGet tại thời điểm này (sẽ có sau NuGet lớn). Trong thực tế, đây không phải là vấn đề vì 'ServiceStack.Common' là gói phần mềm tối thiểu cần thiết cho các máy khách để có thể sử dụng [ServiceStack's .NET client.] (Https://github.com/ServiceStack/ServiceStack/wiki/C% 23 khách hàng). Nói chung, bạn nên cố gắng giữ cho các mô hình dịch vụ của mình hoàn toàn miễn phí, giảm thiểu các lỗi/ma sát mà khách hàng yêu cầu. – mythz