2012-04-08 9 views
0

Angenommen, eine Klasse, deren Aufgabe es ist, Parameter für eine JDBC-Abfrage festzulegen.Ändern Sie den lokalen Methodenparameter für das Feld?

Es hätte eine fillParameters()-Methode und eine PreparedStatement als ein Feld, da über alle privaten Submethoden geteilt.

Außerdem müssen diese Submethoden den aktuellen JDBC-Parameterindex kennen.

So zwei Lösungen können angenommen:

  • Pass aktuellen Index in jedes Verfahren als lokale Parameter (redondant wenn es viele Teilverfahren sind)

  • aktuelle Indexposition als ein Feld Deklarieren (oder Attributs), so dass keine Notwendigkeit besteht, es durch mehrere Methodenparameter zu übertragen. Aber der Nachteil ist, dass es einen Nebeneffekt haben kann, wenn wir uns vorstellen, dass ein zweiter Aufruf dieser Methode mit derselben Objektinstanz erfolgt (aus einem bestimmten Grund, kein wirklicher Anwendungsfall, aber stell dir vor ...). In der Tat wäre es notwendig, die aktuelle Indexposition auf 0 neu zu initialisieren, bevor alle von Submethoden gemachten Prozesse aufgerufen werden.

Was ist die beste Vorgehensweise?

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

Oder:

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

Antwort

1

Die lokale Variable Option ist besser Kapselung der Details, wie Ihre Methode funktioniert. Das wird leichter zu pflegen sein und weniger Nebenwirkungen haben, wie Sie betonen. Wenn Overhead zu einem Problem wird, können Sie optimieren. Ich bin mir nicht sicher, dass es eine Best Practice gibt, da ein Design davon abhängt, was dir wichtig ist. Am besten wäre es, Ihre Argumentation im Code zu dokumentieren.