2013-05-01 2 views
1

Я не очень уверен, что DTO должны быть POCOs, или это может зависеть от любой технологии. Я думаю: лучше держать их как POCOs для поддержки Loose-сцепления и следить за тем, чтобы он работал с любой технологией.Действительно ли стек ServiceStack основывается на стандартах?

Из документации стеки услуг Упоминаются:

Запрос и ответ DTO используется для определения веб-служб в ServiceStack являются стандартными ПОК в то время как реализация просто нужно наследовать от проверяемой и зависимостей свободной IService , В качестве бонуса для хранения DTO в отдельной бесплатной .dll, вы можете повторно использовать их в своих клиентах C# /. NET, предоставляя строго типизированный API без каких-либо кодов, Когда-либо. Кроме вашего DTO в определить все Service Stack не загрязняет свои веб-сервисы с любыми дополнительными пользовательскими артефактами или разметкой

Но если вы видите фактическую реализацию 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, хранятся в проекте зависимостей и без имплантатов ServiceStack.Interfaces. Аннотирование DTO имеет возможность быть доступным для C# clients, которые могут повторно использовать настраиваемые атрибуты маршрута в New API и вызывать службы, используя симпатичные URL-адреса, а не резервные заранее определенные маршруты.

Маркер интерфейса IReturn<T> позволяет больше succinct typed API calls as seen in this answer.

Вам не нужно использовать атрибуты, как вы можете использовать ServiceStack встроенный в беглом API для определения пользовательских маршрутов, например:

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

Каков наилучший способ обмена DTOs с клиентом? – Brainchild

+0

Копирование Dll dll. – mythz

+0

Итак, мне нужно разделить DTO DLL со всеми клиентами. – Brainchild

Смежные вопросы