MIYAMOTO Daisuke
daisuke_m****@yahoo*****
2008年 6月 9日 (月) 13:18:54 JST
都元です。 次の問題提起はデータ型について。 データ型(VARCHARとかINTEGER等)はDataType型のinterfaceを持ち、 それに対する実装の1つがドメイン定義である、というのは地豆会でも説明したとおり。 ではVARCHARとかINTEGERってのの実装は? というと、PrimitiveDataTypeという型に なると思います。 bacchusでは、JiemamyTypeという型(enum)まで登場し、中のコードはスパゲッチ化 しています。もしかしたら一番ヒドいところかもしれないw 申し訳ない事に、もう俺もわからないんだ、あそこ>< だから説明しなかった、 というのもあるw では、なぜ複雑になってしまったのか。 とりあえず地豆内で扱うときのオブジェクト、というのが欲しかった。Oracleだろうと MySQLだろうと、可変長文字列といえばコレ、というオブジェクトが欲しかった。 それがbacchusで言う JiemamyType.VARCHAR ですね。 これが、ホゲホゲされる(俺が忘れた部分w)と、Oracleの場合はVARCHAR2になったり する訳ですよ。 さらに、Oracleモードでテーブルを作って、途中でPostgreSQLに変えたらどうなる? というところにも対応したかった。VARCHAR2をVARCHARに変えるとか、TIMESTAMPを TIMESTAMPにそのまま持っていくならば分かりやすいが、 例えばPostgreSQLのTIME型がしていされていて、Oracleに切り替わった場合は? Oracleには無いので、互換しうるTIMESTAMP型に持っていってやるのが親切。 参考(データ型) PostgreSQL http://www.postgresql.jp/document/pg721doc/user/datatype-datetime.html Oracle http://www.shift-the-oracle.com/element/data-type/ こんなことを考えているうちに、スパゲッチ化してしまった訳ですorz 当時enumの使い方にもなれてなかったから酷いってのもあるなぁ。 で、上手く対策しないと、artemisでも同じ轍を踏みかねない。 今回の相談は、選択肢があるわけじゃないです。どうしたもんだろなー、と。 bacchusでは、enum JiemamyTypeがあって、class PrimitiveTypeがあった。 で、Dialect定義の中で、new PrimitiveType(JiemamyType.VARCHAR, "VARCHAR2") というような記述を登録していっていた「気がする」。ごめんなさいごめんなさいごめ(ガッ 今回は、 interface DataType class DomainModel extends TypeDefModel implements DataType enum PrimitiveDataType implements DataType という構成でうまくいけないかと考えている。のだが。enumって外から拡張できない んすよねー。。。例えば妙なデータ型あるじゃないですか。PostgreSQLって結構 その辺の拡張がひどくて。 何なんだよこの辺...と言いたくなる始末。 http://www.postgresql.jp/document/pg721doc/user/datatype-geometric.html http://www.postgresql.jp/document/pg721doc/user/datatype-net-types.html なんか、混乱してるだけあって、まとまらない相談なんですが。 一言ください>< 質問とかして、俺から情報引っ張り出してくださいw -- MIYAMOTO Daisuke skype: cuervo1800