Я использую Azure DocumentDb / CosmoDB и у меня получился действительно грязный шаблон, из которого мне нужно выйти.
У меня есть контроллер WebAPI, из которого я возвращаю свои объекты на основе идентификатора.У меня также есть хранилище, которое будет запрашивать DocumentDB в зависимости от.Проблема в том, что у меня есть около 30 различных типов (и они растут), и я должен сделать что-то вроде этого:
public async Task<HttpResponseMessage> GetWidget(String id, String widgetType)
{
if (widgetType.Equals("WidgetA"))
{
DocumentDbRepository<WidgetA> repo = new DocumentDbRepository<WidgetA>();
var widget = await repo.GetItemAsync(id);
return (ControllerContext.Request.CreateResponse(HttpStatusCode.OK, widget));
}
else if (resourceBase.SystemType.Equals("WidgetB"))
{
DocumentDbRepository<WidgetB> repo = new DocumentDbRepository<WidgetB>();
var widget = await repo.GetItemAsync(id);
return (ControllerContext.Request.CreateResponse(HttpStatusCode.OK, widget));
}
...
}
Я знаю, это ужасно.Я думаю об использовании отражения или, может быть, даже некоторых шаблонов T4 для генерации всего этого, но я думаю, что должен быть более чистый способ?
заранее спасибо