10

我被要求为现有的用 Java 编写的 shell/cmdline 程序编写 GUI,我想在 GUI 和原始程序之间创建一个抽象层,以便轻松添加不同的 GUI(Web 界面,例如,而不是桌面应用程序)。目前,程序的结构如下:

命令行选项会立即转换为 Java 哈希表(采用诸如-f opt哈希之类的选项"-f=>opt"。这些选项然后用于设置environment程序使用的对象。

我想到的结构是:

沿着实线,这意味着 GUI 生成一个 XML 文件,其中包含与 shell/cmdline 选项相同的信息,然后用于设置environment选项。

问题是,我不太确定这是否是工作的最佳方式(虚线表示替代结构),我也不知道 XML 是否是正确的选择。

就目前而言,从 设置environment对象的程序部分与使用获取结果options的部分位于相同的方法中。environment因此,实现将 shell/cmdline 参数直接馈送到程序中的东西比实现将信息作为 XML 文件传递​​的结构更容易。我当然不想创建 XML 文件,然后将其转换为 shell 选项并将其传输到程序,但 GUI 自己生成 shell 选项而不是创建 XML 可能更有意义。

据我所知,使用 XML 文件的主要优点是它使未来的开发人员的工作更容易,因为他们可以使用现有的库来创建 XML 文件,而不必担心-a opt1 -b opt2 -c opt3 [...]语法是否正确。

另一方面,我听说不要轻易尝试创建自己的 XML 语言(尽管据我所知,该程序将数据存储在没有 DTD 甚至没有模式的 XML 文件中)。

我的方法或多或少是正确的吗?或者我是否使用了完全不合适的工具来完成我正在尝试做的工作?

4

2 回答 2

2

看来你有一个可靠的计划。从命令行参数和/或配置文件加载选项是一种非常常见的范例。使用 XML 没有问题,但 JSON 和 YAML 是两个具有更简洁语法的替代方案,它们也可以正常工作。

Java 已经有PropertiesPreferences,可以用来完成这个。在重新发明轮子之前,你应该看看那些。

于 2013-08-13T12:50:13.893 回答
2

在 XML 方法中,您将采用用户选项,创建 XML,将其传递给主程序,解析 XML 并提取值以设置环境。除非您将选项从一个进程传递到另一个进程或通过网络传递,否则这些努力将太多(即使在这种情况下,您也可以使用 json)

如果我们谈论的是通过 GUI 或命令行传递这些选项的单个进程,我们可以简单地将这些参数封装到 Java 对象中,使用命令行/GUI 填充它并将其传递给主程序。例如命令行或 GUI -> 填充EnvironmentOptions对象 -> 主程序

并且为了提供 require 抽象,您可以创建一个接口说IEnvironmentOption并使用它来设置所需的属性。

interface IEnvironmentOption {
    public static final String OPTION_NAME = "-t";

    public void setOption(String name, String value);

    public String getOption(String name);
}

class EnvironmentOptions implements IEnvironmentOption {
    private Properties envProperties;

    @Override
    public void setOption(String name, String value) {
        envProperties.setProperty(name, value);
    }

    @Override
    public String getOption(String name) {
        return envProperties.getProperty(name);
    }
}
于 2013-08-13T13:45:12.880 回答