Запрос обратной связи/варианты/комментарии относительно "наилучшего" шаблона для использования для справочных данных в моих сервисах.
Что я имею в виду под ссылочными данными?
В качестве примера можно использовать Northwind. Заказ связан с клиентом в базе данных. Когда я реализую свою службу заказов, в некоторых случаях мне нужна ссылка "полный" Клиент из заказа и другие случаи, когда я просто хочу ссылку на Клиента (например, пару "ключ/значение" ).
Например, если бы я делал GetAllOrders(), я бы не хотел возвращать полностью заполненный заказ, я бы хотел вернуть облегченную версию Ордера с только справочными данными для каждого заказа клиента. Однако, если бы я использовал метод GetOrder(), я бы, вероятно, хотел бы заполнить данные Клиента, потому что, возможно, ему нужен этот метод. Могут быть и другие ситуации, когда я могу попросить, чтобы детали клиента были заполнены во время определенных вызовов методов, но оставлены для других.
Вот что я придумал:
[DataContract]
public OrderDTO
{
[DataMember(Required)]
public CustomerDTO;
//etc..
}
[DataContract]
public CustomerDTO
{
[DataMember(Required)]
public ReferenceInfo ReferenceInfo;
[DataMember(Optional)]
public CustomerInfo CustomerInfo;
}
[DataContract]
public ReferenceInfo
{
[DataMember(Required)]
public string Key;
[DataMember(Required)]
public string Value;
}
[DataContract]
public CustomerInfo
{
[DataMember(Required)]
public string CustomerID;
[DataMember(Required)]
public string Name;
//etc....
}
Мысль здесь состоит в том, что, поскольку ReferenceInfo (которая является общей парой Key/Value) всегда требуется в CustomerDTO, у меня всегда будет ReferenceInfo. Это дает мне достаточно информации, чтобы позже получить информацию о Клиенте, если это необходимо. Недостатком того, что CustomerDTO требует ReferenceInfo, является то, что он может быть переполнен, когда я получаю полный CustomerDTO (т.е. С заполнением CustomerInfo), но по крайней мере мне гарантируется справочная информация.
Есть ли какой-нибудь другой шаблон или фреймворк, который я могу использовать, чтобы сделать этот сценарий/реализацию "более чистым"?
Причина, по которой я спрашиваю, заключается в том, что, хотя мы могли бы просто сказать в Northwind, чтобы ВСЕГДА вернули полную CustomerDTO, которая может хорошо работать в упрощенной ситуации в Northwind. В моем случае у меня есть объект с 25-50 полями, которые являются ссылочными/поисковыми типами данных. Некоторые из них более важны для загрузки, чем другие, в разных ситуациях, но я хотел бы иметь как можно меньше определений этих ссылочных типов (чтобы я не попадал в "адский аспект DTO" ).
мнения? Обратная связь? Комментарии?
Спасибо!