Предпочитаемый способ конвертировать Lazy / Delay-loading в Eager-loading в API? - PullRequest
0 голосов
/ 18 декабря 2009

Я уже некоторое время работаю над API (который оборачивает своего рода веб-сервис), и он почти готов к работе.

Я изначально проектировал этот API так, чтобы он был ленивым / с задержкой загрузки; это имеет смысл, если вас интересует только небольшое подмножество доступных данных с учетом задержки, присущей потреблению веб-службы. Однако я не рассмотрел несколько случаев использования, при которых загрузка API была бы намного проще для потребителя API.

Итак, мой вопрос: как бы вы хотели, чтобы API с преимущественно ленивой загрузкой представлял механизм для получения загруженных версий классов?

Я склоняюсь к explicit приведению, но что-то вроде Eager.AsEager(SomeDelayLoadingObject) также кажется естественным, если оно более многословно.

Ответы [ 2 ]

0 голосов
/ 22 марта 2013

Ваш API оборачивает веб-сервис, поэтому ваш API более или менее действует как прокси. Я бы поставил поведение загрузки на сам прокси или какой-то контекст прокси, а не на классы.

// Basic: Every operation through the proxy uses Eager loading
using (var proxy = new ApiProxy(Loading.Eager))
{
  var result = proxy.DoSomething();
}
0 голосов
/ 22 декабря 2009

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

Затем я определил два неявных приведения: ленивый -> нетерпеливый и нетерпеливый> ленивый. Оба приведения скопировали все свойства; тем самым вызывая любую загрузку, если это было необходимо.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...