Я собираюсь внедрить свою модель домена в API службы WCF и хотел бы получить некоторые мысли о методах ленивой загрузки с этим типом настройки.
Любые предложения при таком подходе?
когда я реализовал эту технику и зашел в свое приложение, прямо перед тем, как сервер вернет мой список, он попадает в get каждого свойства, которое должно быть загружено лениво ... Таким образом, загрузка выполняется с нетерпением. Не могли бы вы объяснить эту проблему или предложить решение?
Обновлено: это появляется, вы можете использовать атрибут XMLIgnore, чтобы он не просматривался во время сериализации ... все еще читаю об этом, хотя





Что касается любой архитектуры удаленного взаимодействия, вам следует избегать загрузки полного графа объектов «по проводам» неконтролируемым образом (если только у вас нет тривиально малого числа объектов).
Статья в Википедии содержит в значительной степени обобщенные стандартные методы (и в C# тоже!). Я использовал как призраков, так и держателей ценностей, и они работают довольно хорошо.
Чтобы реализовать такую технику, убедитесь, что вы строго разделяете проблемы. На сервере классы реализации контракта службы должны быть единственными частями кода, которые работают с контрактами данных. На клиенте уровень доступа к сервису должен быть единственным кодом, который работает с прокси.
Подобное наслоение позволяет настроить способ реализации службы относительно независимо от уровней пользовательского интерфейса, вызывающих службу, и вызываемого бизнес-уровня. Это также дает вам половину шанса на модульное тестирование!
Не выполняйте ленивую загрузку через служебный интерфейс. Определите явные DTO и используйте их в качестве контрактов данных в WCF.
Вы можете использовать NHibernate (или другие ORM) для правильной выборки объектов, необходимых для создания DTO.
В основном вам нужно создать ProxyCollection, который наследуется от IList или ICollection, и он должен иметь возможность отслеживать команду для загрузки элементов. при доступе к любому из членов сначала выполните команду для заполнения списка.
Вы можете попробовать использовать что-то на основе REST (например, Службы данных ADO.NET) и прозрачно обернуть это в свой клиентский код.
Я застрял только в мире ado.net ... есть ли шанс, что вы могли бы предоставить образец упомянутого вами подхода?