桌面客户端应用程序的良好架构

时间:2015-09-22 19:09:07

标签: oop design-patterns agile

我已经多次运行创建桌面客户端应用程序以处理某个服务器的问题,并且每次我都使用丑陋的代码,这在几次发布后几乎无法支持。

我强调了以下要点:

  • 所有操作必须是异步的,没有任何虚拟窗口用于相对快速的操作(即少于30秒)

  • 应用必须定期与服务器连接并检查,例如,用户帐户

  • 所有重型操作必须可取消

但是,最重要的是,所有这一切必须是#34;当然"在代码中,没有造成不必要的困难(单身,黑客等)...只需要最小的开销代码。

你会如何设计这样的应用程序?你会用什么模式?您可以推荐哪种具有良好架构的开源项目?

1 个答案:

答案 0 :(得分:0)

这看起来有点过于宽泛,但是当我发现问题很有趣时,我会尝试给出答案而不是标记。如果想到这些内容,我邀请您添加更多详细信息 即使您的设计涉及应用程序的设计,也有许多语言,模式和技术可以满足您的要求。 保持一般,

  1. 如果您希望您的操作是异步的,那么您将会这样做 需要多个线程。它们的实施和使用可能有所不同 取决于您使用的语言,但背后的概念 是一样的。所以,每次需要时都会产生一个线程 异步任务,并实现一种在任务发生时要注意的方法 完成(有或没有错误)。这可以通过多种方式完成, 既然你问了模式我建议你看看 observer
  2. 第二个要求对我来说并不完全清楚,我想你 我想定期检查客户的数据是否与之对齐 服务器,并且可能执行安全检查("是会话和 身份验证凭据仍然有效?")。第一个解决方案是 实际上每隔 n 秒询问服务器,再次使用另一个 线。这种民意调查可能不是最佳选择:如何 你是否考虑到连接问题的可能性?即使你的 如果没有与服务器的工作连接,客户端就无法运行 可能会打扰用户断开连接并失去工作 因为他的Wi-Fi路由器重启了。我建议你表演 在I / O上进行对齐检查,也许可以区分关键和 非关键的。例如,如果您决定用户的个人资料 要对齐,然后您可以在查看时从服务器检索更新的数据。另一方面,如果您的应用程序提供 用户一份烹饪食谱清单,你不要关心他 查看已在服务器上插入的那个10分钟 过去,你可以简单地缓存这些项目并在一个中刷新它们 每分钟后台线程,甚至没有注意到用户 更新失败的情况。最后但并非最不重要的,如果你也是 关注数据的并发修改,再次基于您的 您可以决定对正在编辑的数据实施锁定的要求, 执行检查保存操作以查看数据是否有 同时改变,或简单地让用户覆盖 服务器上的数据无论如何。总而言之,我希望能够解释 你的问题正确,这个要求是非常重要的,必须是 根据您的特定用例进行调整。
  3. 假设数据最终保存在某种数据库上 服务器,一个答案是transactions,允许你这样做 甚至将复杂的操作序列视为"全部或全部", 原子指令。你可以实现自己的系统来拥有 同样的结果,但我真的没有看到不使用它的意义 尽可能强大的仪器。请记住一件事:我' m 假设"可取消"意味着在某个时间点之前可以取消, 而不是" (某种"撤消")。如果你正在寻找完整的 任何数据操作的可恢复性,要求都变得很远 更复杂,一般不可能保证。
  4. 我相信我已经以一种可以帮助你最小化" hacks"尽可能在代码中。回顾一下:

    1. 您将需要线程,观察者模式可以帮助您 保持代码清洁。
    2. 同样,您可以使用线程,或专注于检查I / O操作。在 在第二种情况下,您可以考虑应用程序层 专门用于客户端 - 服务器同步,将其嵌入一个或 更多课程,并在那里执行所有检查。看看吧 proxy pattern
    3. 使用事务还原操作,并仅发出COMMIT 如果您确定操作已确认,则ROLLBACK进入 其他每一个案子。将此逻辑封装在服务器的代码中以便这样做 客户端不知道正在使用的实际交易系统, 你的代码应该很干净。
    4. 如果我的答案不满意或不清楚,请发表评论。