Разоблачение сущностей через WCF - PullRequest
3 голосов
/ 01 мая 2011

У меня есть WCF, который использует модель данных объекта ADO.NET для доступа к SQL Server.

Чтобы вставить новую строку в таблицу с семью столбцами, я использую метод WCF.

Я думаю, что отправить семь параметров - это слишком много, поэтому я могу использовать объект сущности структуры или таблицы.

Что вы думаете?Вы рекомендуете мне выставлять объект сущности через WCF?Или мне нужно использовать структуру, чтобы избежать этого.

Ответы [ 2 ]

3 голосов
/ 01 мая 2011

Это зависит от размера / сложности вашего приложения. Предоставление объекта возможно, но это может вызвать некоторые проблемы с сериализацией при транспортировке всего графа объекта (объекта с его отношением). Эти проблемы обычно решаются путем маркировки сущностей с атрибутами DataContract и DataMember (используется по умолчанию, если вы используете EFv1 или генерирование сущности по умолчанию в EFv4 = нет шаблонов T4).

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

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

1 голос
/ 22 мая 2011

Мой опыт использования сущностей в качестве Контрактов на данные заключается в том, что вы постоянно сталкиваетесь со всеми видами хлопот. Поддержка DTO не идеальна, но дает вам очень точный контроль, включая возможность изменять схему БД без изменения ваших контрактов, а также контроль над полями, предоставляемыми вашей службой.

Automapper действительно может помочь вам: http://automapper.codeplex.com/

...