Ленивая загрузка с моделью домена службы WCF? - PullRequest
6 голосов
/ 30 августа 2008

Я хочу перенести модель своего домена в API-интерфейс службы WCF и хотел бы подумать о методах отложенной загрузки с помощью этого типа установки.

Есть ли какие-либо предложения при использовании этого подхода?


когда я реализовал эту технику и вошел в свое приложение, незадолго до того, как сервер возвращает мой список, он получает доступ к каждому свойству, которое, как предполагается, загружается с отложенной загрузкой ... Таким образом, нетерпеливая загрузка Не могли бы вы объяснить эту проблему или предложить решение?

Edit: он появляется , вы можете использовать атрибут XMLIgnore, чтобы он не просматривался во время сериализации ... все еще читая об этом, хотя

Ответы [ 3 ]

4 голосов
/ 02 сентября 2008

Не выполняйте отложенную загрузку через служебный интерфейс. Определите явные DTO и используйте их в качестве контрактов на данные в WCF.

Вы можете использовать NHibernate (или другие ORM), чтобы правильно выбрать объекты, необходимые для создания DTO.

3 голосов
/ 31 августа 2008

Как и в случае любой удаленной архитектуры, вам следует избегать неконтролируемой загрузки полного графа объектов "по проводам" (если только у вас нет тривиально небольшого числа объектов).

В статье Википедии стандартные методы в значительной степени обобщены (и в C #. Тоже!). Я использовал и призраков, и держателей ценностей, и они работают довольно хорошо.

Чтобы реализовать этот вид техники, убедитесь, что вы строго разделяете проблемы. На сервере классы реализации вашего контракта на обслуживание должны быть единственными частями кода, которые работают с контрактами на данные. На клиентском уровне доступ к сервису должен быть единственным кодом, который работает с прокси.

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

1 голос
/ 15 сентября 2008

Вы можете попробовать использовать что-нибудь на основе REST (например, ADO.NET Data Services ) и прозрачно обернуть это в свой клиентский код.

...