我被要求编写一个用
Java编写的现有shell / cmdline程序的GUI,我想在GUI和原始程序之间创建一个抽象层,这样可以轻松添加不同的GUI(Web界面,例如,而不是桌面应用程序).目前,方案的结构如下:
命令行选项将立即转换为Java散列表(采用-f选项进行散列“-f => opt”等选项,然后用于设置程序使用的环境对象.
我想到的结构是:
遵循实线,这意味着GUI生成一个保存与shell / cmdline选项相同信息的XML文件,然后用于设置环境选项.
事情是,我不太确定这是否是事情工作的最佳方式(虚线,表示替代结构),我也不知道XML是否是正确的选择.
就这样,从选项中设置环境对象的程序部分位于与使用环境获取结果的部分相同的方法中.因此,实现将shell / cmdline参数直接提供给程序的内容将比实现将信息作为XML文件传递的结构更容易.我当然不想创建XML文件,然后将其转换为shell选项并将其传递给程序,但是GUI可以更有意义地生成shell选项本身,而不是创建XML.
使用XML文件的主要优点是我可以看到,它使未来开发人员的工作更容易,因为他们可以使用现有的库创建XML文件,而不必担心获得-a opt1 -b opt2 – c opt3 […]语法权限.
另一方面,我听说,尝试创建自己的XML语言是not to be taken lightly(尽管该程序将数据存储在没有DTD或甚至模式的XML文件中,就我所知).
我的做法或多或少是正确的?或者我正在使用完全不合适的工具来完成我想要做的工作?
解决方法
在XML方法中,您将使用用户选项,创建XML,将其传递给主程序,解析XML并提取值来设置环境.除非您将选项从一个进程传递到另一个进程或通过线程(即使在这种情况下也可以使用json),这些努力将会太多
如果我们谈论通过GUI或命令行传递这些选项的单个进程,我们可以简单地将这些参数封装到Java对象中,使用命令行/ GUI将其传递给主程序.例如
命令行或GUI – >填充EnvironmentOptions对象 – >主程序
并提供需求抽象,您可以创建一个界面,说明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); } }