これは別の議論のテーマですが、今回は単純で文書化された回答のみを探しています. シナリオ:
次の方法を想定しましょう。 public static Hashtable<Long, Dog> getSomeDogs(String colName, String colValue) {
Hashtable<Long, Dog> result = new Hashtable<Long, Dog>();
StringBuffer sql = null;
Dog dog = null;
ResultSet rs = null;
try {
sql = new StringBuffer();
sql.append("SELECT * FROM ").append("dogs_table");
sql.append(" WHERE ").append(colName).append("='");
sql.append(colValue).append("'");
rs = executeQuery(sql.toString());
while (rs.next()) {
dog= new Dog();
//...initialize the dog from the current resultSet row
result.put(new Long(dog.getId()), dog);
}
}
catch (Exception e) {
createErrorMsg(e);
result = null; //i wonder....
}
finally {
closeResultSet(rs); //this method tests for null rs and other stuff when closing the rs.
}
return result;
}
質問:
1. いくつかの属性を持つ犬を返すこのテクニックを改善するために、どのような方法を提案しますか?
2. rs.next() は、null ResultSet に対して false を返すか、次のような例外を生成します。
文字列 str = null; System.out.println(str.toString());
3. ResultSet の現在の行から犬のオブジェクトを初期化しているときに、接続障害、互換性のない値が犬のプロパティ セッターに渡されたなどのような問題が発生した場合はどうなりますか? ハッシュテーブルには今では 10 個の要素があるかもしれませんし、何もないかもしれません (最初の行)。次のアクションは次のとおりです。a) null ハッシュテーブルを返します。b) この段階での結果のハッシュテーブルを返します。c) 例外をスローする: ここでの例外の種類は何ですか?
4. この点については、全員が同意すると思います。悪いことは何も起こらず、尋問に行がなく、null 値が返されます。ただし、@Thorbjørn Ravn Andersen はここで、null 値ではなく NullObject を返す必要があると述べています。あれは何だろう。
5. アプリケーションをいくつかのレイヤーまたはレベルに分割する必要があると言っている人やグループに気づきました。上記の例を考えると、私が考えることができるこれらのものを除いて、ここにはどのようなレイヤーがありますか:
Layer1 :: アクションが実行されるデータベース層: このメソッド。
レイヤー2 :: ??? : 新しい Dog オブジェクトが構築されるレイヤー: 私の Dog オブジェクト。
レイヤー3 :: ? : 犬のコレクションで何かをしようとしているレイヤー: GUI レイヤー、主に、またはユーザー インターフェイスのサブレイヤー。
申請の流れをたどると、1層目で例外が発生した場合、どのように対処するのがベストでしょうか? 私の考え: 例外をキャッチし、例外をログに記録し、何らかの値を返します。それはベストプラクティスですか?
マニーさん、ご回答ありがとうございます。他の人がこれらの問題についてどう思うか楽しみにしています。