10

Java で記述された既存のシェル/コマンドライン プログラムの GUI を作成するように依頼されました。別の GUI (Web インターフェイス、たとえば、デスクトップ アプリケーションではありません)。現時点では、プログラムの構造は次のとおりです。

コマンド ライン オプションは、すぐに Java ハッシュ テーブルに変換されます ( -f opthashなどのオプションを使用します。これらのオプションは、プログラムが使用するオブジェクト "-f=>opt"を設定するために使用されます。environment

私が考えている構造は次のとおりです。

実線に沿って、これは GUI が shell/cmdline オプションと同じ情報を保持する XML ファイルを生成し、それを使用してenvironmentオプションを設定することを意味します。

問題は、それが物事が機能するための最良の方法であるかどうかはよくわかりません (点線は別の構造を意味します)。また、ここで XML が正しい選択であるかどうかもわかりません。

environment現状では、からオブジェクトを設定するプログラムの部分は、optionsを使用して結果を取得する部分と同じメソッド内にenvironmentあります。したがって、情報が XML ファイルとして渡される構造を実装するよりも、シェル/コマンドライン引数をプログラムに直接供給するものを実装する方が簡単です。確かに、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オブジェクトの作成 -> メイン プログラム

そして、必要な抽象化を提供するために、たとえばインターフェイスを作成し、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 に答える