代码之家  ›  专栏  ›  技术社区  ›  Eldelshell

GUI编程。数据库和表同步

  •  1
  • Eldelshell  · 技术社区  · 16 年前

    我在几个桌面应用程序上工作过,这些应用程序使用表对数据库表中的信息进行分组。但是保持这些信息的更新让我不得不尝试不同的解决方案,比如每X秒更新一个执行查询的表的工作线程,或者只是一个刷新视图的按钮。我甚至见过一个应用程序,它可以使用鼠标移动事件刷新表格。所以我的问题是,你更喜欢哪种方法。有没有一种“完美”的方式可以让我在大学里过夜?

    6 回复  |  直到 16 年前
        1
  •  3
  •   zendar    16 年前


    它是一种实时监控应用程序,比如股票交易、工厂监控软件,还是在一些CRUD应用程序中有网格,需要自动更新?

    ,然后我要做的第一件事是检查需求:

    • 您的用户是否真的需要随时自动更新信息,
    • 您的用户是否一直在看显示器?

    若你们真的需要你们描述的方法,那个么你们做得很好——你们可以使用定时器或者其他事件(按钮、鼠标移动等)来刷新数据。当然,随着用户数量的增加,不断的重新查询将成为性能问题。

    如果是 实时监控软件 由于数据量大,所以不应将数据库置于系统的中心。您应该拥有您的客户机通过TCP(或某些类似协议)连接到的中心服务。中央服务应保持系统的最新状态(可能还有一些历史记录)。客户机可以连接到服务,并且服务应该在有新数据时通知客户机,以便避免持续轮询。数据库应该用作应用程序用于分析过去事件的日志,但不用于实时显示。

    编辑:

    关于安德烈的回答:我不确定这是否解决了你的问题。观察者模式通常使用subscribe/notify机制实现,以便数据源可以在数据更改时通知所有观察者。

    数据绑定工作在过程中-您不能将网格直接绑定到数据库中的表。您首先需要将应用程序中的数据放入可以绑定到GUI(数据集、列表等)的对象中

        2
  •  2
  •   Andrej    16 年前

    一些编程语言/框架内置了对数据绑定的支持。数据绑定将同步视图(表组件)和数据(数据库表)。

    如果您的语言没有标准的绑定解决方案,那么看看现有的绑定解决方案是如何实现的可能会很有用,例如jgoodies绑定(它是开源的)。

    编辑:

    关于数据库更改的好观点。这有点难。从技术上讲,应该可以使用触发器通知客户。例如,在Oracle中,触发器可以使用高级队列在消息队列上发布数据更改事件消息,感兴趣的客户端可以监听该消息。不过,我还没有在实践中看到这一点。您通常不希望将有关gui客户端的知识放入数据库中。

        3
  •  0
  •   csl    16 年前

    完美的 特定于您的需要,但许多网站只要在您更新单元格时更新表即可。这会产生大量的流量。也许您可以使用(例如)事务将更新排队,然后在用户关闭给定表时提交,按 拯救

    我认为这完全取决于你的具体应用。

        4
  •  0
  •   Riho    16 年前

        5
  •  0
  •   Eldelshell    16 年前

    非常有帮助的安德烈。当您有机会使用数据绑定时,数据绑定似乎是最简单的方法。

    哦,是的,观察者模式:

    软件设计模式,其中 家属并通知他们 在任何状态变化时自动, 实现分布式事件处理 系统。

    谢谢你非常好的回答。

        6
  •  -1
  •   Eldelshell    16 年前

    对于网络应用来说,这很酷。但我们谈论的是一个桌面应用程序,即使在空闲时,它也应该不断更新数据库中的信息。 这与其说是编程问题,不如说是设计问题。