1

我正在寻找实现以下情况的选项:

在客户端/服务器系统中,我想实现一个评估在客户端构建的表达式的基础架构。表达式应由表达式树表示,以类似 XML 的方式进行编码以进行通信。在客户端,应该有一个用于组合树和编辑现有树的 UI。在服务器端,应该有一个用于评估树木以及存储和检索这些树木的基础设施。

存储/检索部分很简单。它只是将一段文本存储在数据库中。

现在,对于编写/编辑 UI 和评估逻辑,我需要在客户端和服务器端都有一个相应的表达式类层次结构,用于表示表达式树。该树将从文本表示中构建,并将用于生成文本表示。在服务器端,严格来说,只需要解析部分,而不需要生成文本表示。但原则上,该部分可以在客户端和服务器代码之间共享。(解析器利用可用表达式类的注册表来构造适当的节点。)

在客户端,需要处理树以更新评估 GUI 状态。在服务器端,需要处理树以评估表达式。

因此,我看到的一个选项是在客户端和服务器端编写不同的树访问者,例如用于更新 GUI 状态、评估 GUI 状态和评估表达式。缺点是我不能使用虚方法来处理表达式的多态性,而是需要将不同的现有表达式子类硬编码为访问者中的动态转换代码。

我更喜欢的选项是将表达式操作(更新 GUI、评估 GUI、评估表达式)放入表达式基类的接口中。但是,服务器端不应包含任何 GUI 代码。相反,表达式求值依赖于服务器基础设施,因此显然无法使用客户端代码进行编译。因此,如果表达式操作是接口的一部分,则在客户端和服务器之间没有用于共享表达式的公共基类。

我目前正在考虑是否可以将表达式类层次结构作为每个表达式接口的模板,但我认为,同时听取来自 stackoverflow 社区的建议可能会很有趣。

实现上下文:C++/Qt

4

0 回答 0