Динамические контракты данных в WCF - PullRequest
2 голосов
/ 17 июня 2011

Существуют некоторые болевые точки вокруг передачи объектов между клиентом и службой WCF.

  • Победа над отложенной загрузкой путем сериализации всех свойств
  • Сериализованные данные могут быть чрезмерно раздуты
  • Некоторая связь между пользовательским интерфейсом и бизнес-уровнем

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

Я думаю, было бы замечательно, если бы реализация службы могла генерировать эти DTO динамически, и это представляется возможным . К сожалению, похоже, что контракт будет свободно определяться на стороне клиента (то есть «объект»), и это пахнет как возможный риск.

Желательно ли использовать динамические DTO таким способом или есть другой способ использовать DTO без создания / поддержки классов для каждого из них?

Я думаю, что Святой Грааль был бы там, где реализация динамически генерирует DTO, но клиент видит четко определенные контракты. Я предполагаю, что это невозможно с WCF.

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Полагаю, проблема в том, из чего вы собираетесь их генерировать?У вас должно быть какое-то описание того, как выглядят данные, которые вы хотите передать.Если все, что у вас есть, это доменные объекты, то вы в конечном итоге окажетесь в аналогичной позиции для передачи данных, которые вы бы получили через объект домена.

Одной из ключевых функций, которую обеспечивает DTO, является развязка, позволяющая вам развить свои доменные объекты, не повреждая потребителей ваших услуг случайно.Если вы динамически генерируете DTO, то вы будете каскадно вносить изменения - если только вы не рассматриваете динамическое создание как одноразовое упражнение, чтобы начать работу с DTO

1 голос
/ 17 июня 2011

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

...