3

次のソース スニペットを検討してください。

スニペット #1

  StoredProcedure sp = new StoredProcedure( "PROC_NAME", getConnection() );
  sp.putParameter( "ID", getId() );
  sp.execute();

スニペット #2

  StoredProcedure sp = new StoredProcedure( "PROC_NAME" );
  sp.setConnection( getConnection() );
  sp.putParameter( "ID", getId() );
  sp.execute();

スニペット #3

  StoredProcedure sp = new StoredProcedure( "PROC_NAME" );
  sp.putParameter( "ID", getId() );
  sp.execute( getConnection() );

Q: どのスニペットが最もオブジェクト指向で、その理由は?

Q: 各スニペットの長所と短所は何ですか?

4

2 に答える 2

2

私の意見: どれも同時にはありません。

すべてのスニペットは、 という名前のメソッドを示していactionます。一般的な OO 設計の一部は、各メソッドが 1 つのことだけを行い、メソッド名がそれを反映しているということです。actionメソッド名は反射的ではなく、あらゆるものの包括的なタイトルとして使用できるためです。実際に何をしているのかを見ると、このメソッドは のように呼ばれているようexecuteProcNameです。

OO は、最小知識の原則としても知られるデメテルの法則についても多く取り上げています。これは、ゲッターを使用することは良いことであり、すべてのスニペットがすでにそれを行っているため、 jballが彼の回答で述べているように、実際にはすべてオブジェクト指向であり、その場合は同等であることを意味します。私が好むものを選ぶ必要がある場合、必要な外部クラス/値を可能な限り最後の瞬間に取得するための#3(この場合、それらはパフォーマンスに影響します)または#2は、それが最も読みやすいためです。

これは、アカデミックなセマンティクスに深入りしなくても言えることだと思います。

于 2009-12-10T17:48:17.167 に答える
0

他のポスターが述べたように、それは非常に好みの問題です.

個人的には最初の方が好きです。接続に関する限り、あなたの意図をより早く示しているからです。getConnection からの接続に対して実行することは既にわかっているのに、後で設定する必要はありません。

p = new Person("Joe", "Smith");

よりも明確です

p = new Person();
p.setFirstName("Joe");
p.setLastName("Smith");

あなたにとって最も読みやすいものはどれでも最高のものだと思います。

于 2009-12-10T17:49:54.310 に答える