[Seasar-user:8675] Re: [S2Dao] Bean のプロパティに基本型以外を使う方法

Yasuo Higa [E-MAIL ADDRESS DELETED]
2007年 6月 26日 (火) 14:33:15 JST


ひがです。
> > >
> > > うーん。そうなると Enum はバッチリですが、DB にString 以外で格納している
> > > 場合のユーザ定義型データクラスをどうするか、が残っています。
> > > 例えば今私のプロジェクトでいうと、権限レベルを int で管理しており、
> > > 業務に割り当てられた権限レベルとユーザの権限レベルなどから計算によって、
> > > 権限を持っているか判断しています。
> > > 権限クラスを用意し、DBに格納された値を保持し、権限レベルに権限を有するか
の
> > > 判定メソッドを持っています。(判定機能を Authority クラスにカプセル化し
たい)
> > > Authority#valueOf(int) で権限クラスのインスタンスを生成し、
> > > user.getAuthority().available(int) で判定するような形です。
> > > データアクセスの結果 PropertyDescImpl#convertIfNeed に渡される arg は
> > > int であるため、String のコンストラクタや valueOf(String)
> > > を用意しても意味がありません。
> >
> > Authority#valueOf(String)も用意し、
> > public static Authority valueOf(String arg) {
> >  return valueOf(Integer.parseInt(arg));
> > }
> > のように実装するというのはいかがでしょうか。
> > String#valueOf()もいろいろな型の引数に対応していますし、
> > そんなに不自然なことはないと思います。
> 
> ということは、コミットされた実装では、arg の型がなんだろうと、valueOf(String)
 が
> 呼ばれるということでしょうか?私が示した次善策のような形なのでしょうか?

arg の型がなんだろうと、valueOf(String)を呼び出す実装は
まだ、いれていません。
仕様をもう少し議論する必要がありそうなので。

最新の実装だと、Enumについては、データベースへの読み書きとも
OKです。

ユーザ定義型に対しては、valueOf(String)メソッドがあれば、
データベースから読み込むことはできますが、データベースに
書き込むことはできません。

独自のValueTypeを登録していただければ、現状でも対応が
可能です。

valueOf(...)の処理をがんばれば、カラムの値を
ユーザ定義型のプロパティに変換することはできるのですが、
ユーザ定義型のプロパティをカラムの値に変換するルールが
現状ではまだ決まっていません。

もっとも単純なのは、ユーザ定義型のプロパティのtoString()を
よびだしてカラムの値に変換することです。

あるいは、value()ってインスタンスメソッドが定義されていれば、
その戻り値をデータベースに格納するというルールにする
こともできます。
その場合は、valueOf()の引数の型は、value()の戻り値の型と
同じだとみなすことになるでしょう。

public static Authority valueOf(int level) {
   ...
}
public int value() {
   ...
}
のような感じです。

よろしくお願いします。

--
Yasuo Higa
[E-MAIL ADDRESS DELETED]



Seasar-user メーリングリストの案内