[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 メーリングリストの案内