Асинхронный DAO в Flex / Sqlite? - PullRequest
2 голосов
/ 03 января 2011

Статья дает хорошее представление о том, как бороться с sqlite во Flex;но он не углубляется в то, как решать асинхронный доступ к данным.

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

  • updateEmployee (emp: Employee):void
  • findEmployee (emp: Employee): void
  • findAllEmployees (): ICollectionView

и т. д.

До тех пор, пока EmployeesDAO реализуетВ асинхронном режиме эти методы допустимы только после подключения БД и создания таблиц.Клиент должен знать об этой асинхронной природе, чтобы использовать эти методы, так как следующие вызовут SQLErrorOperation, так как findAllEmployees будет пытаться выполнить операцию «SELECT» до того, как база данных будет подключена:

var dao:IEmployeesDAO = new EmployeesDAO();
var employees:ArrayCollection = dao.findAllEmployees();

Что такоелучшая практика, чтобы иметь дело с реализацией асинхронного DAO?Можно ли скрыть асинхронную природу от клиента объектов доступа к данным (т. Е. Клиент не знает, использует ли он синхронизацию или асинхронные DAO)?

Ответы [ 4 ]

3 голосов
/ 04 января 2011

Единственный способ, который я знаю для решения такой проблемы, - использовать передачу результатов в обратный вызов.Вот как мы взялись за прослушивание различных асинхронных токенов или сообщений о событиях.

1 голос
/ 04 января 2011

Насколько я знаю, то, что вы спрашиваете, невозможно во флэш-вселенной.В JS я знаю только один проект, который эффективно решает эту проблему.

http://stratifiedjs.org пытается быть языком, похожим на javascript, только с некоторыми дополнительными ключевыми словами, чтобы решить, что вы хотите делать в асинхронных ситуациях, и компилируетне очень читаемому, но очень производительному JS за кулисами.

0 голосов
/ 09 января 2011

Существует фундаментальное различие между асинхронным и синхронизированным программированием, и клиентский код должен знать об этом, чтобы использовать службу. Шаблон для работы с асинхронным подключением к базе данных заключается в том, чтобы клиент передавал обратные вызовы для вызова определенной операции для обработки результата (в случае успеха) или сбоя (в случае сбоя операции). Обратные вызовы могут быть заключены в такие вещи, как flash.net.Responder или mx.rpc.IResponder и т. Д. В приложении LOB жизненный цикл приложения связан к соединению с БД, так что в момент, когда приложение пытается запуститься, соединение с БД должно быть либо уже установлено (например, аутентификация пользователя), либо в противном случае пользовательский интерфейс блокирует пользователя. После установления соединения с БД все экземпляры DAO могут получить соединение с БД. Конечно, последующие операции с БД все еще требуют реализации шаблонов обратного вызова, упомянутых выше.

0 голосов
/ 06 января 2011
...