【问题标题】:Asynchronous DAO in Flex / Sqlite?Flex/Sqlite 中的异步 DAO?
【发布时间】:2011-01-03 05:00:36
【问题描述】:

The article 很好地了解了如何在 Flex 中处理 sqlite;但并未深入探讨如何处理异步数据访问。

例如,如果我有一个EmployeesDAO,它执行以下操作:

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

等等。

只要EmployeesDAO实现异步模式,这些方法只有在连接数据库并创建表后才合法。客户端必须了解这种异步性质才能使用这些方法,因为 findAllEmployees 将在连接数据库之前尝试执行“SELECT”操作,因此以下将引发 SQLErrorOperation:

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

处理异步 DAO 实例化的最佳实践是什么?是否可以对数据访问对象的客户端隐藏异步特性(即客户端不知道它使用的是同步还是异步 DAO)?

【问题讨论】:

    标签: sql apache-flex sqlite dao


    【解决方案1】:

    我知道解决此类问题的唯一方法是将结果传递给回调。这就是我们处理监听各种异步令牌或事件消息的方式。

    【讨论】:

      【解决方案2】:

      据我所知,您所问的问题在 Flash 宇宙中是不可能的。在 JS 中,我知道只有一个项目可以有效解决这个问题。

      http://stratifiedjs.org 尝试成为类似 javascript 的语言,只使用一些额外的关键字来决定您想在异步情况下做什么,并在幕后编译成可读性较差但性能非常好的 JS。

      【讨论】:

      • 我确信“总有一天”SJS 会被移植到 Flash ;)
      • 我希望如此! :) 还可以让 flex 中的异步事情更加理智的是 Mate。这是一篇关于使用 Mate 和 air sqlite 的文章:goo.gl/vFLyB
      【解决方案3】:

      【讨论】:

      • 感谢您的链接。它似乎只处理同步模式还是我错过了什么?
      【解决方案4】:

      异步和同步编程之间存在根本区别,客户端代码必须意识到这一点才能使用服务。处理异步数据库连接的模式是让客户端将回调传递给特定的操作调用以处理结果(如果成功)或错误(如果操作失败)。回调可以封装在 flash.net.Respondermx.rpc.IResponder 等中。在 LOB 应用程序中,应用程序的生命周期与数据库连接相关联,因此当应用程序尝试启动时,数据库连接必须要么已经建立(例如用户被认证),否则 UI 将用户锁定。 DB 连接建立后,所有 DAO 实例都可以获取 DB 连接。当然后续对DB的操作还是需要实现上面提到的回调模式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 2019-10-01
        • 2023-04-08
        • 2019-03-11
        • 2013-10-16
        • 2017-12-18
        相关资源
        最近更新 更多