Должна ли служба WCF возвращать класс EntityObject или POCO / DTO? - PullRequest
7 голосов
/ 28 января 2011

Я просматривал множество примеров WCF с использованием EntityFramework, и большинство из них, похоже, возвращает клиенту какой-то класс POCO или DTO.

Мне было интересно, почему это так, поскольку значение по умолчанию EntityObject включает атрибуты [DataContract] и реализует INotifyPropertyChanged.Возвращение класса DTO или POCO лучше, чем EntityObject (или наоборот)?И есть ли конкретные случаи, когда лучше использовать одно возвращаемое значение над другим?

Ответы [ 2 ]

8 голосов
/ 28 января 2011

Рекомендуется, чтобы он возвращал класс DTO / POCO, который явно разработан как контракт данных и не имеет логики постоянства.

Причина в том, что если вы передаете объект EntityObject, выделают предположение, что потребитель сервиса будет иметь ссылку на тот же контекст данных, и это нарушает принцип явных границ SOA.Это уменьшает возможность повторного использования вашего сервиса.

Вероятно, что Microsoft реализовала DataContract на EntityObject для поддержки некоторых из своих инструментов доступа к базе данных на основе WCF, таких как RIA.INotifyPropertyChanged предназначен для поддержки связывания WPF и не связан с WCF или контрактами на данные.

0 голосов
/ 28 января 2011

Стоит вернуть POCO в некоторых случаях, когда вы не знаете о логике персистентности.Я имею в виду тот же POCO может быть подключен к другой ORM или для других целей.Хорошо, это преимущество POCO над ORM, но оно также дает вам повышение производительности по сравнению с EntityObject, который добавляет время выполнения прокси / уведомителей.

Возврат POCO - вы должны вручную обновить состояние объекта при получении от WCF.

Returning EntityObject - Вы получаете объект с сохраненным состоянием.

...