Вопрос

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

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

<Ч>

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top