2

私のダイス シミュレーターは、ユーザーの入力とモデルによって UI が異なります。GroupLayout を使用できるようにしながら、バリエーションとオプションのパラメーターを処理するビルダー パターンを実装しようとしています。

現時点では、コントローラーで次のような呼び出しを行っています。

if ((model.simRolls <> null) && (inputEvent.getSource == outputBtn) && (model.testType.equals("Success"))) {
    SimView outputScreen = new SimView.Builder(jframe, jpanel).testLabel("SUCCESS TEST OUTPUT", GroupAlignment.LEADING).outputLabel(model.simRolls, GroupAlignment.CENTER).actionButton("Next", GroupAlignment.TRAILING).build();
}

if 文は種類が無限にあるので嫌いです。MVC で必要な UI をクリーンかつ正確に構築するために使用できる抽象化、コントラクト、またはインターフェイスを理解できる人はいますか?

4

2 に答える 2

2

で無限の組み合わせを処理しようとする代わりにif-statement、句をいくつかのより細かい句に分割してみませんか? このようにして、さらに新しい機能を追加する場合、さらに別の組み合わせを処理するのを忘れることを心配することなく、既存の句に別の小さな句を簡単に追加できます。

例えば:-

SimViewBuilder  builder = new SimViewBuilder(jframe, jpanel);

if (model.simRolls != null) {
    builder = builder.actionButton("Next", GroupAlignment.TRAILING);
}

if (inputEvent.getSource == outputBtn) {
    builder = builder.outputLabel(model.simRolls, GroupAlignment.CENTER);
}

if (model.testType.equals("Success")) {
    builder = builder.testLabel("SUCCESS TEST OUTPUT", GroupAlignment.LEADING);
}

... // add more if statements for other features and configure the builder accordingly

// finally, build it
SimView outputScreen = builder.build();
于 2011-02-20T05:49:04.820 に答える
1

通常、この例で提案されているように、ビューがモデルのオブザーバーとして登録されるように調整します。レイアウトは、実際にそれを使用するビューにのみ認識されます。

于 2011-02-20T05:50:22.430 に答える