Вопрос

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

Это действительно привлекло мое внимание из-за проблемы, над которой я сейчас работаю.Я работаю над отправкой товара, чтобы предоставить моим пользователям такую информацию, как тарифы / сроки доставки.Чтобы централизовать фактические сервисы, у меня есть веб-служба 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
Это было полезно?

Решение

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top