DTO / Вопрос о шаблоне команд - PullRequest
1 голос
/ 09 ноября 2009

Было очень интересное обсуждение LosTechies относительно AutoMapper (аргумент за / против 2-стороннего отображения).

Это действительно привлекло мое внимание из-за проблемы, с которой я сейчас работаю. Я работаю над отправкой, чтобы предоставить пользователям информацию, такую ​​как цены / сроки доставки. Для централизации реальных служб у меня есть веб-служба WCF, в которой сохраняются любые доменные объекты.

Для упрощения модели предметной области у меня в основном есть 2 класса:

public class Shipment
{
 public IList<Item> Items{get;set;}
}

public class Item
{
 //some primitive properties
}

У меня также есть соответствующий набор DTO, которые были созданы, чтобы облегчить нагрузку на провод. Часть представления (или части, независимо от того, что касается веб-службы), используют DTO без знания модели предметной области.

Мой вопрос приходит сюда. Для создания отгрузки сервис принимает список товаров. Существует логика создания поставок, которая скрыта за веб-сервисом. По сути, это означает, что ItemDTO передается по проводам (клиент -> сервер), создаются посылки, затем ShipmentDTO передается обратно (сервер -> клиент). Теперь у ShipmentDTO есть дочерний список ItemDTO, который создает сценарий двустороннего сопоставления.

Это больше, чем простая операция CRUD, и я плохо знаком с шаблоном командных сообщений, поэтому мне интересно, как сообщество решит эту проблему.

Вы передаете DTO в обе стороны с двухсторонним сопоставлением?

Пример использования (уровень представления):

List<ItemDTO> list = new List<ItemDTO>();
//add items to list


ShipmentServiceClient client = new ShipmentServiceClient();
List<ShipmentDTO> shipments = client.GetShipments(list);

//shipments are now displayed to the user
//with respective costs and other useful data

Ответы [ 2 ]

1 голос
/ 10 ноября 2009

Что-то, что было упомянуто в этом посте, что я не совсем понял, была формулировка в ответе. Msgstr "Входящие DTO отображаются в командные сообщения". Скажем, DTO могут быть двунаправленными, а сопоставления (AutoMapper) могут быть однонаправленными.

0 голосов
/ 09 ноября 2009

Имея риск пропустить суть вашего вопроса, я скажу, что это нормально - использовать DTO в двух направлениях, если вы не используете DTO по неправильной причине. В вашем случае, является ли запрос к серверу создать отправку для набора элементов, полностью заполняющих каждый ItemDTO, так что когда сервер получает его обратно, ItemDTO в основном совпадают? Или вы действительно запрашиваете отправку нескольких предметов, но возвращаемое ItemDTO содержит некоторые дополнительные данные, заполняемые сервером (например, стоимость доставки для каждого предмета, состояние инвентаря и т. Д.)? В последнем случае я бы сказал, что вам не следует повторно использовать ItemDTO для представления как конкретного предмета, запрашиваемого для отгрузки, так и сведений о доставке предмета.

...