0

JDBC クエリにパラメータを設定するクラスがあるとします。

すべてのプライベート サブメソッドで共有されるfillParameters()ため、フィールドとしてメソッドと PreparedStatement が含まれます。

さらに、これらのサブメソッドは、現在の JDBC パラメータ インデックスを認識している必要があります。

したがって、次の 2 つのソリューションが採用される可能性があります。

  • 現在のインデックスを各メソッドにローカル パラメーターとして渡します (サブメソッドが多数ある場合は冗長)

  • 現在のインデックス位置をフィールド (または属性) として宣言して、複数のメソッド パラメーターを介して渡す必要がないようにします。しかし、欠点は、このメソッドへの 2 回目の呼び出しが同じオブジェクト インスタンスで行われると想定すると、副作用が発生する可能性があることです (特定の理由で、実際のユースケースではなく、想像してみてください...)。実際、サブメソッドによって作成されたすべてのプロセスを呼び出す前に、現在の Index Posion を 0 に再初期化することが必須です。

ベストプラクティスは何ですか?

public void fillParameters(){
this.currentIndex = 0; //reinitialize to first index !
//....call to each submethods without need to pass currentIndex as local parameter
}

または :

public void fillParameters(){
int currentIndex = 0;
//....call to each submethods with currentPosition as index like :
feedFirstParameter(++currentIndex);
feedSecondParameter(++currentIndex);
}
4

1 に答える 1

1

ローカル変数オプションは、メソッドの動作の詳細をより適切にカプセル化します。あなたが指摘するように、それは維持しやすく、副作用を起こす可能性が低くなります. オーバーヘッドが問題になる場合は、最適化できます。設計はあなたにとって何が重要かによって異なるため、ベストプラクティスがあるかどうかはわかりません。どちらの方法でも、推論をコードに文書化することが最善の方法です。

于 2012-04-08T21:01:57.217 に答える