JavaFX桌面应用程序与远程服务器通信的最佳实践

Muz*_*Ali 4 java desktop-application javafx

我需要有关在JavaFX中与远程服务器通信设计桌面应用程序的最佳实践建议.由于我主要有开发Web应用程序的经验,因此我需要了解常见问题并且需要知道在开发桌面应用程序时应该考虑这些问题.

问题描述和要求:

这是一个应用程序,供员工查看数据,根据其角色执行报告和执行其他几项操作.

  • 该应用程序将安装超过10名员工,#可以在以后增加.
  • 每个员工都应该能够登录并使用该应用程序(多个员工可以同时使用该应用程序).
  • 将记录对每位员工执行的数据的任何修改,以便将来跟踪.
  • 应用程序将根据其角色以不同方式显示给每个用户.
  • 由于此应用程序将安装在许多计算机上,因此员工可以从不同的计算机登录到应用程序,并且可以通过登录识别它们.

建议的解决方案:

如果:

  • 我使用Mysql作为后端数据库?
  • 我创建了一个与数据库连接的中间服务器,它允许客户端应用程序连接到服务器并通过它交换数据或者员工使用的每个应用程序实例应该直接建立与同一本地网络上另一台服务器上托管的数据库的连接?

Omi*_*mid 6

应用程序的体系结构有许多组件需要考虑并且可以通过多种方式进行设计,因此对该问题没有明确的答案,但在设计问题时应该考虑一些重要的问题.在开发桌面应用程序时,您应该考虑它与Web应用程序的主要区别,并尝试解决它们带来的挑战.

  • 网络(或Internet)连接:桌面应用程序可能始终没有活动的网络连接,因此除非您希望程序在活动连接不可用时每次事务都失败,否则它应具有其本地嵌入式数据库(如h2)当活动连接可用时,稍后将数据与远程服务器中的Web应用程序同步(由于服务器端验证,负载平衡等原因,请勿直接连接到远程DB!).

    桌面应用程序本质上是独立的,所以如果没有互联网连接就无法运行,那么桌面应用程序的重点是什么呢?

  • 同步:上一点表明您应该拥有本地数据库并将其与远程服务器应用程序同步.请记住,同步应该是两种方式:A)将本地数据发送到服务器B)从服务器接收数据并将其保存在本地数据库中.如果数据模型复杂且充满依赖性,因为依赖实体需要同步在一起,这可能会非常棘手,并且会增加连接失败或断电等事件中同步操作的风险.还应考虑数据模型的变化.所以试着:

    • 将数据模型设计为尽可能小.
    • 避免实体之间的依赖关系.
    • 避免在数据模型中对跨用户交互进行建模,因为它打破了应用程序被设计为由用户使用而不管其他用户(在桌面应用程序中经常出现这种情况)的假设.
    • 设计用于同步的协议,该协议考虑数据模型的更改,并且可能需要在同步开始之前更新程序.
  • 更新:桌面应用程序通常需要定期更新.您必须在设计架构的所有步骤中牢记这一点,特别是在设计高级模块时,因为它们应尽可能独立,以便可以独立更新.您还需要设计更新方案来处理此要求.

  • 多线程: JavaFx和大多数桌面框架(我所知道的)都有一个主线程,可以驱动应用程序和UI组件在其中进行更新.同步和数据库事务之类的耗时操作不应该在主线程中完成,因为它们会导致程序冻结.它们应该在一个单独的后台线程中运行,并定期将它们的进度通知给mian线程.

  • 数据库会话:在Web应用程序中,打开会话视图是一种流行的数据库会话策略,但实现它对桌面应用程序来说可能很棘手.请记住,通常为整个应用程序设置一个会话并不是一个好主意,因为您不应该长时间保持会话打开(例如,如果您正在使用hibernate,请特别注意).

  • 通知:实施通知系统以定期检查远程更改并通知用户是一个好主意.