Я хочу сохранить тонну функциональности, которую я имел в своей кодовой базе из сервисного уровня, который я использовал ранее, используя сервисы OData, но через ServiceStack, предполагая, что я реализую сервисную логику c, я не хочу я должен сделать кучу новых DTO для запросов, когда это, по сути, то, чего я пытаюсь достичь, если фреймворк не «заставляет» меня объявлять кучу дополнительных классов без какой-либо функциональной выгоды ...
[Route("~/{Type}")]
public class GetRequest
{
public string Type {get; set; }
public string Select { get; set; }
public string Expand { get; set; }
public string Filter { get; set; }
public string GroupBy { get; set; }
public string OrderBy { get; set; }
}
public ServiceBase<T> : Service
{
public virtual IEnumerable<T> Get(GetRequest<T> request) { ... }
}
public FooService : ServiceBase<Foo>
{
public override IEnumerable<Foo> Get(GetRequest<Foo> request) { ... }
}
Единственный другой способ реализовать это - это создать Doo FooRequest, который наследует от generi c и ничего не добавляет.
Хотя это может иметь место в некоторых сценариях ios, для большей части сотен конечных точек, которые мне нужно перенести, это просто кажется расточительным и, скорее всего, потребует от меня необходимости генерировать код, что-то, по мнению Service Stack, "не нужно".
Моя ситуация усугубляется, потому что у меня есть «несколько контекстов данных» для рассмотрения, например ...
// base implementation for all services, derives from ServiceStack Service
public abstract class ServiceBase<T> : Service { ... }
// core service then one concrete implementation off that
public class CoreService<T> : ServiceBase<T> { ... }
public CoreFooService : CoreService<Foo> { ... }
/// b2b service then one concrete implementation off of that
public class B2BService<T> : ServiceBase<T> { ... }
public class BarB2BService : B2BService<Bar> { ... }
... с моей реализацией на основе OData мне нужно только добавить каждый новый класс, чтобы добавить точку настройки для этого типа данных в стеке.
С ServiceStack это все еще представляется возможным в отношении классов обслуживания (я думаю, но я не совсем понимаю, как работает маршрутизация) ... я запутался в понимании запросов DTO, которые в основном одинаковы во всех запросах get, но, по-видимому, не маршрутизируются на основе некоторой информации tpye в URL.
В идеале я хотел бы направить стандартный запрос DTO к методу службы, используя комбинацию используемого HTTP-глагола, а затем что-то вроде [Route ("~ / {Context} / {Type}")] в URL (при этом использование атрибутов в DTO).
У меня такое ощущение, что ServiceStack работает не так, и собирается потребовать, чтобы я определил новый DTO буквально для каждого метода в каждой службе, и я собираюсь чтобы определить кучу новых сервисов, которые не существуют, без новых подробностей реализации, чтобы удовлетворить Он нуждается в фреймворках.
Или я упускаю какую-то хитрость в том, как использовать фреймворк здесь, чтобы избежать этой работы?