Перенос типов пользователей между доменом и уровнями обслуживания в WCF - предлагаемые подходы? - PullRequest
0 голосов
/ 16 апреля 2011

Проблема знакома - при распределении пользовательских / доменных типов через границы сервисов мы просто аннотируем объекты обогащенного домена с атрибутами [DataContract] (тем самым загрязняя домен конструкциями ServiceModel) или реализуем какой-то процесс DTO (создание дополнительной работы для, возможно, небольшой выгоды)?

  • Как люди разрешают этот конфликт? Есть ли другие подходы, у которых меньше минусов?
  • Если вы используете подход DTO, как вы реализуете перенос значений свойств из объекта домена в DTO?

Спасибо

Ответы [ 3 ]

3 голосов
/ 16 апреля 2011

Вы в основном ответили на ваши вопросы. Если вы хотите очень четкий дизайн, используйте DTO. Если вы не хотите добавлять дополнительный уровень сложности, либо пометьте классы атрибутами DataContract / DataMember, либо используйте сериализацию по умолчанию (только .NET3.5 и новее), которая принимает все открытые свойства (с помощью getter и setter) + you может удалить некоторые свойства из сериализации, используя атрибут IgnoreDataMember. Чтобы сопоставить объекты домена с DTO и DTO с объектами домена, вы можете использовать AutoMapper .

0 голосов
/ 17 апреля 2011

Это может быть очевидно, но я хочу добавить к тому, что сказал Ладислав. Как он упоминает, вы можете использовать типы POCO, но у вас также есть возможность выйти за пределы и использовать IXmlSerializable, ISerializable, Serializable и другие; эти другие мощи сериализации не могут гибко использоваться с IgnoreDataMember.

См. в этом блоге для получения дополнительной информации. В нем также подробно описано, как DataContractSerializer будет определять приоритеты двух конфликтующих моделей программирования для одного типа.

0 голосов
/ 16 апреля 2011

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

...