Запрос отзывов / опций / комментариев относительно «лучшего» шаблона для использования в качестве справочных данных в моих службах.
Что я подразумеваю под справочными данными?
Давайте используем 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 (который является общей парой ключ / значение) всегда требуется в CustomerDTO, у меня всегда будет ReferenceInfo. Это дает мне достаточно информации, чтобы получить детали клиента позже, если это необходимо. Недостатком того, что CustomerDTO требует ReferenceInfo, является то, что это может быть излишним, когда я получаю полный CustomerDTO (т.е. с заполненным CustomerInfo), но по крайней мере мне гарантирована справочная информация.
Есть ли какой-нибудь другой шаблон или элемент структуры, который я могу использовать, чтобы сделать этот сценарий / реализацию "чище"?
Причина, по которой я спрашиваю, заключается в том, что, хотя мы могли бы просто сказать, что в Northwind ВСЕГДА возвращать полный CustomerDTO, это может хорошо работать в упрощенной ситуации Northwind. В моем случае у меня есть объект, который имеет 25-50 полей, которые являются данными типа ссылки / поиска. Некоторые из них более важны для загрузки, чем другие в различных ситуациях, но я хотел бы иметь как можно меньше определений этих ссылочных типов (чтобы я не попал в «адскую область обслуживания DTO»).
Мнения? Обратная связь? Комментарии?
Спасибо!