Silverlight, асинхронный, отложенная загрузка, что это лучший способ?

голоса
0

Я начал использовать SilverLight / Flex и сразу же столкнулся с асинхронным вызовом службы. Я привык к решению проблемы доступа к данным в оо-пути с одним сервером выборки механизма или другого.

У меня есть следующий тривиальный пример кода:

public double ComputeOrderTotal(Order order) 
{ 
   double total = 0;
   // OrderLines are lazy loaded
   foreach (Orderline line in order.Orderlines) 
   { 
       // Article,customer are lazy loaded 
       total = total + line.Article.Price - order.Customer.discount;
   }
   return total;
}

Если я правильно понимаю, этот код невозможно в Flex / Silverlight. Ленивые загрузки заставляет вас работать с обратными вызовами. ИМО простой expample выше будет большой беспорядок.

Может кто-нибудь дать мне структурированный способ реализации выше?

Редактировать:

  • Проблема та же для Flex / Silverlight, псевдо-код будет делать хорошо
  • Его на самом деле не ORM связанных, но большинство ORMs использовать отложенную загрузку, так что я буду удалить этот тег
  • Проблема заключается в отложенной загрузки в модели
  • Приведенный выше пример будет очень выполнимо всех данных в памяти, но мы предполагаем, некоторые должны быть выбраны с сервера
  • Closueres не помогают, поскольку иногда данные уже загружены и не получать не требуется асинхронный
Задан 10/12/2008 в 09:23
источник пользователем
На других языках...                            


7 ответов

голоса
1

Flex имеет однопоточную модель. Если вы сделаете синхронный вызов к веб-серверу, вы бы блокировать весь графический интерфейс приложения. Пользователь будет иметь зависшего приложения, пока вызов не завершится (или раз на состояние ошибки сети и т.д.).

Конечно, реальные программы RIA не написаны таким образом. Их GUI остается доступным и отзывчивым к пользователю через использование асинхронных вызовов. Это также дает возможность иметь реальные индикаторы прогресса, которые предлагают отменить кнопки и такие, если характер варрантов взаимодействия таких.

Старые, плохо пользовательский опыт веб 1.0 приложения демонстрировали синхронное поведение в их взаимодействии с веб-уровня.

Поскольку моя связана статья указывает, асинхронная однопоточных модель в сочетании с ActionScript3 затворов хорошая вещь, потому что это гораздо более простая модель программирования, чем альтернатива - написание многопоточных приложений. Многопоточность был подход написания клиент-сервер Java Swing или C # .NET WinForm приложений для достижения столь же отзывчивый, жидкость-на-все-времена работы пользователя в графическом интерфейсе.

Вот еще одна статья, которая углубляется в весь этот предмет асинхронной, обмен сообщениями / событиями ведомой распределенной архитектуры приложения:

Создание эффективной Enterprise Distributed Software Systems передачи данных управляемого против поведения управляемой связи

Ответил 23/12/2008 в 06:42
источник пользователем

голоса
1

В моем непосредственном опыте с Flex, я думаю, что это обсуждение становится слишком сложным.

Ваш концептуальный вид OO ничем не отличается от синхронизации и асинхронным. Единственное отличие состоит в том, что вы используете обработчики событий, чтобы иметь дело с принимающей разговор в DAL, а не что-то вернулся из вызова метода. И это часто бывает полностью на стороне хозяина, и не имеет ничего общего с Flex или Silverlight. (Если вы используете AIR для приложения рабочей станции, то это может быть в коде клиента, но то же самое. Как и при использовании длительной AJAX. Silverlight, конечно, не имеет аналогов AIR.)

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

Ответил 23/12/2008 в 03:55
источник пользователем

голоса
1

Я не могу говорить с Silverlight, но Flex является технология клиент веб-браузер и не имеет каких-либо драйверов баз данных, встроенный в выполнения Flash-памяти. Вы можете сделать взаимодействие по протоколу HTTP к веб-серверу вместо этого. Именно там в веб-сервер среднего уровня, где вы будете делать какие-либо ОРМ в отношении подключения к базе данных, таких как Java JDBC. Hibernate ORM и Ibatis два популярных варианта в среднем уровне пространстве Java.

Кроме того, из-за этого:

Заблуждения распределенных вычислений

Вы не делать синхронные взаимодействия с клиентом Flex для его среднего уровня услуг. Синхронные сетевые операции стали Verboten в эти дни и являются отличительным признаком подписи плохо спроектированными приложений - как из-за причины, перечисленных в приведенной выше ссылке, приложение может (и часто) имеет очень плохой опыт пользователя.

Вы вместо того, чтобы сделать асинхронные вызовы для извлечения данных, загрузок данных в модели объект (ов) ваше клиентское приложения, и приступить к выполнению операций по модели. С Flex и BlazeDS вы также можете иметь среднего уровня передавать данные клиента и обновлять модель клиента объектов асинхронно. (Связывание данных является одним из способов ответить на данные обновляются в событии ведомым способом.)

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

Я вхожу в это более подробно, и с точки зрения Flex, в этой статье:

Flex Асинхронный I / O против Java и C # Явное Threading

Ответил 23/12/2008 в 03:47
источник пользователем

голоса
1

Да , я должен согласиться , что отображение O / R обычно делается на стороне сервера приложения. В SilverLight асинхронный способ исполнения является искомым шаблона для использования при работе с сервисами. Почему услуги? Потому что , как я уже говорил нет О / Р инструмента отображения в тот момент , который может быть использован на стороне клиента (SilverLight). Лучший подход , чтобы ваш O / R отображаются данные , предоставляемые службой , которая может потребляться в SilverLight применения. Лучший способ на данный момент является использование ADO.NET DataServices для транспортировки данных, так и на стороне клиента для управления данными с использованием LINQ для служб. Что действительно интересно о ADS (бывший проекта Astoria) является то , что она предназначена для использования с Entity Framework, но хорошие люди также реализована поддержка для IQueriable так что в основном вы можете подключить любой поставщик данных , который поддерживает LINQ. Для того, чтобы назвать несколько вы можете рассмотреть Linq To Sql, Telerik OpenACCESS , LLBLGen и т.д. Для того, чтобы раздвинуть обновления на сервер источника данных , необходимых для поддержки ADS IUpdateable.

Вы можете выглядеть так же точно , как это может быть сделано в серии , что я · блоги , · заготовил здесь: Начало работы с ADO.NET данных услуг и Telerik открытого доступа

Ответил 19/12/2008 в 09:05
источник пользователем

голоса
0

C # 5 асинхронной / ждут построить почти точно, что я хочу ..

смотреть презентацию Хейлсберг

Ответил 12/11/2010 в 13:04
источник пользователем

голоса
0

Говоря о Silverlight, вы должны обязательно проверить RIA услуги .

Проще говоря, это приносит DataContext от сервера к клиенту, где вы можете асинхронно запросить его (нет необходимости писать службы WCF вручную, все это делается с помощью RIA).

Ответил 21/12/2009 в 17:23
источник пользователем

голоса
0

Silverlight представляет собой технологию клиент и объект - реляционная отображение происходит полностью на сервере. Таким образом, вы должны забыли о ОРМ в Silverlight.

Следуя ваш пример, что вы должны сделать, это создать веб-сервис (SOAP, REST ...), который может дать вашему клиенту Silverlight полностью «Заказать» объект. Если у вас есть объект, который вы можете работать с ним, без связи с сервером в обычном - синхронном способе.

Ответил 12/12/2008 в 12:07
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more