-2

私は100に近い製品をたくさん持っており、各製品にはDBに独自のテーブルがあります。これは、製品ごとに検索機能を実装したためです。いくつかのパラメーターとテーブル名以外の残りのロジックはすべて残っているため、コードを再利用することを考えていました同じ、

String test = request.getParameter("test");

test は、製品に関する情報を含むドロップダウン リストです。

私が考えていた方法は

if ( test.equals(ProductA)) {
          List<searchbean> list = dao.fetchDBRecords(tableA,other parameters of form);
        }

リストからのパラメーターは、SQL クエリに渡されます。

ここで私の質問は、複数の製品に単一のクラスを使用するのが理にかなっていますか、それとも製品ごとに個別のクラスを使用する方が理にかなっていますか?

私はこれを 2 つの理由で尋ねています。時間の経過とともに、コード ベースが大幅に増加したようで (300 クラス以上)、さらに成長しないように制御する方法が必要です。複数の製品に対して単一のクラスを使用すると、注意が必要な同時実行の問題が発生しますか。

4

2 に答える 2

0
  1. リクエストからパラメータを取得してクエリに挿入することにより、SQLインジェクションの問題が発生しないようにしてください。
  2. すべての製品に同じクラスを使用する必要があります。一部の製品に追加機能がある場合は、プロパティマップ(推奨)を使用するか、継承を使用してメイン製品クラスからサブ製品を派生させます。
  3. すべての製品に1つのクラスを使用しても、同時実行の問題は発生しません。複数のスレッドからクラスのインスタンス(クラスではなくクラスのインスタンス)を使用する場合にのみ、同時実行の問題が発生します。
  4. あなたがそれをしている方法では、300以上の比較があります(if(parameter.equals(product1){...})。より一般的な方法は、ハッシュマップを事前入力し、パラメーターをキーとして使用して値を検索することです。

    Map <String、String> tableNameMap = new HashMap <String、String>(); tableNameMap.put( "param1"、 "table1");
    tableNameMap.put( "param2"、 "table2");

    String paramValue = request.getParameter( "test");
    文字列tableName=tableNameMap.get(paramValue);

于 2012-09-29T07:08:09.460 に答える
0

「製品ごとのクラス」または「製品ごとのテーブル」モデルは好きではありません。製品を追加または削除するたびにコードを変更する必要はありません。問題について少し抽象的に考える必要がありますが、行き過ぎて認識できないほど混乱しない限り、それだけの価値はあります。

並行性の問題について常に心配する必要がありますが、それはどちらの設計にも当てはまると思います。

300 以上のクラスがあり、さらに追加するつもりですか? そして、あなたは並行性について心配していますか?確かに並行性は重要ですが、最初に設計を調整する必要があります。

于 2012-09-29T02:19:31.673 に答える