[seasar-s2dao-dev:648] Re: DAO-143 フィールドの並びが定義順とは限らない件

YOKOTA Takehiko [E-MAIL ADDRESS DELETED]
2008年 10月 7日 (火) 11:23:57 JST


横田です。

Koichi Kobayashi さんは書きました:

> アノテーション案だと例えば
> 
> [seasar-s2dao-dev:638]
>> - INDEXは@ProcedureParameterの属性でデフォルト-1にしておいて、
>>   -1の場合は現行と同様(取得できた順)にするとか
> 
> となってますが,デフォルトで大丈夫なのは
> どんな環境で,明示的に指定しないといけないのは
> どんな環境なのか告知すべきですよね.

アノテーション案では、デフォルトで使わないことを強く推奨しているのだと
思っています。

●アノテーション案:
  ・順番を明示的にアノテーションで指定してね
  ・指定しない場合の挙動は保証しませんよ
  ・互換性のことを考えて、指定しなくてもエラーにはしませんよ

これに対してJavassist案では、明示的に指定する方法を提供しないわけです
よね。それだと、安全なコードを書きたい人が安全なコードを書けないことに
なります。また、あるJavaコンパイラやVMの実装ではうまく動かない、となっ
た場合にアプリケーションコード側だけでの対処ができません。

というわけで、

> 明示できるようにしておくから,問題が起きた人は
> アノテーションで指定してね,という程度なら

ということではなく、「困りたくなければ明示してね」というものにすべきで、
そう考えるとJavassist案は安全ではないという意見です。

ただ、おっしゃるように、

> ちなみに,Javassist 案とアノテーション案は
> 排他的ではありません.
> 
> アノテーション案を採用するにしても,Javassist 案を
> 併用することでランタイム環境の影響が排除され,
> デフォルト (並び順を明示しない) で大丈夫な環境を
> 拡大することができます.

既存コードが正しく動く可能性を高めるという意味ではJavassist案「も」
実施するという選択肢はありだと思います。

あとは実装のコスト、実装の複雑度の増大、実行速度への影響などを考えて
実施を検討すれば良いと思います。

というわけで、結論は「Javassist案だけ」という対策はNGではないか、とい
うことです。

-- 
YOKOTA Takehiko
  [E-MAIL ADDRESS DELETED]


seasar-s2dao-dev メーリングリストの案内