サンプルをつくるぜ 第1弾

昨日のエントリで書いたこんなことを踏まえてサンプルを作ってみる事にしましょ。

<メソッド編>
 (1)1つに付き1種類しか役割を持たないメソッド
 (2) (1)をいくつか呼び出すだけのメソッド

車とかテレビとかに例えられる「オブジェクト指向とは」というメタファは全くわからんと言いたくなるほど想像つきにくいので、
おいらは「SQLを投げてデータベースからレコードを取得する」というのを例にコードを作ってみるとします。
まず。
メソッドの処理内容設計から。
Select文を投げてからデータを取得するまでにはどんな手順が必要か羅列します。

 1. SQL文を作る
 2. SQL文を投げる
 3. RecordSetを取得する
 4.(RecordSetの結果を加工する)

これを元に(2)の呼び出しだけメソッドを作ります。

public ResultSet queryToResultSet(){
  RecordSet result = null;  // 戻り値作成用

  // 1. SQL文を作る
  String strSQL = createSQL();

  // 2. SQL文を投げる
  boolean boolRtn = executeQuery( strSQL );
  if( boolRtn ){
    // 3. RecordSetを取得する
    result = getResultRecordSet();

    // 4.(RecordSetの結果を加工する)
    //result = arrangesData( result );
  }

  return result;
}

とはいえ、Javaの言語仕様的には2と3を分離させるのはアホっぽいのでこうしてしまえ。

public ResultSet queryToResultSet(){
  RecordSet result = null;  // 戻り値作成用

  // 1. SQL文を作る
  String strSQL = createSQL();

  // 2. SQL文を投げてRecordSetを取得する
  result = executeQuery( strSQL );
  //if( !( result == null ) ){
  //   4.(RecordSetの結果を加工する)
  //  result = arrangesData( result );
  //}

  return result;
}

これで最小限機能のSelect発行用メソッドが出来たので、
次に実処理用のメソッドを。

// 省略:ヘッダコメント!
private String createSQL(){
  StringBuffer strbSQL = new StringBuffer(256);  // キリがいい

  strbSQL.append( " select " );
  strbSQL.append( " item01 " );
  strbSQL.append( " , item02 " );
  // 〜(中略)〜
  strbSQL.append( " , itemXX " );
  strbSQL.append( " from " );
  strbSQL.append( " table_name " );
  // 〜(where文省略)〜

  // SQL文返却
  return strbSQL.toString();
}
// 省略:ヘッダコメント!
private RecordSet executeQuery( String strSQL ){
  ※ とりあえず細かい事はおいといて、コネクションはあるものとしてステートメントを使ってみる
  Statement stmt = _con.getConnection().createStatement();
  return stmt.executeQuery( strSQL );
}

// 省略:ヘッダコメント!
private RecordSet arrangesData( RecordSet rsItem ){
  // データの加工はこちらで好きなように
  
  return rsItem;
}