-
Type: Improvement
-
Resolution: Fixed
-
Priority: Major
-
Component/s: None
-
None
【概要】
DBFluteの区分値機能は便利ではあるが、設定が大変であり環境的に利用しづらい面がある。
classificationDefinitionMap.dfpropに全て定義を書かなければならないが、
区分値は別途ドキュメントで管理されることが多く、管理が冗長してしまう。
別リソースから区分値定義を指定できればと考える。
区分値定義 はERDのテーブルやカラムのノートに書くやり方を前提とする。
理由は以下の通り:
o プロジェクトとして管理し易いため
o 区分値一覧表はDBFluteで出力できるため
ERDのテーブルやカラムのノートに区分値定義を書く際に、
ある決まりのタグを付けた区分値定義を記述してもらい、
出力されたテキストファイル(XMLとかHTMLとか)上の
その決まった形式の区分値定義をパースして読み込む。
classificationDefinitionMap.dfpropの内容とマージするような形とする。
【リソースファイル】
ファイルは、dfprop配下のclassificationResource.dfpropという名前にする。
内容はXMLでもHTMLでもテキストファイルであればなんでもよく、
DBFlute文字列検索で区分値定義をパースする。
Encodingはデフォルトで「UTF-8」。
もし、XML定義のように一行目に「encoding="SHIFT_JIS"」というように
定義されている場合はSHIFT_JISとなる。
(EAで出力したXMLであればこれが活用できる)
【区分値記述形式】
ドキュメントとして見やすく、パースしやすい形式であること。
改行をデリミタとして判断する。「& # x A ;」も改行として判断される。
[区分値のタイトル]: 関連付けるカラム名 $ 区分値の名称, 区分値のコメント - コード, 名称, 別名, コメント - コード, 名称, 別名, コメント - ...
[会員ステータス]: MEMBER_STATUS_CODE $ MemberStatus, 会員の状態を示す - FML, Formalized, 正式会員, 正式な会員を示す - PRV, Provisional, 仮会員, 仮の会員を示す - WDL, Withdrawal, 退会会員, 退会した会員を示す
【区分値のタイトル】
存在自体は必須。中身は任意で特にDBFluteでは利用しない。
"[Xxx]"の形式で書いてあれば何でもよく、パース対象か否か
の判定だけに利用される。わかりやすい業務的なタイトルを
つけるのがドキュメント的に好ましい。
【関連付けるカラム名】
任意。不要な場合は、タイトル行は"[Xxx]"だけでも良い。
"[Xxx]"の後は半角コロン「:」で区切ってその後の文字列が
全てカラム名として扱われる。
classificationDeployementMap.dfpropの「$$ALL$$」の設定に利用する。
つまり、「このカラムを持つ全てのテーブルに関連付ける」ことになる。
もし、カラム名がバラバラで限定できない場合は、
classificationDeployementMap.dfpropを利用して個別個別定義すること。
"*_FLG"というように半角アスタリスク「*」を使うことで後方一致や前方一致を表現できる。
この場合は、「カラム名が"_FLG"で終わる全てのカラムに関連付ける」となる。
(JIRAの都合上ここでは全角で書いています)
(中間一致は残念ながら不可)
【区分値の名称】
必須。区分値の識別子として利用する。
ENUMの名前にも利用されるので、クラス名で利用できない
文字列を含めることはできない。(先頭が数字とか)
【区分値のコメント】
任意。JavaDocコメントに記載される。
必要の無い場合は、タイトル行は"[タイトル]"だけでも良い。
【コード, 名称】
必須。
コードは、DBに実際に格納される値。
名称は、メソッド名に利用される値。
【別名, コメント】
任意。
別名は、プログラム上で取得可能。
コメントは、JavaDocコメントに記載される。
【補足1】
http://dbflute.sandbox.seasar.org/view/exampledb/EARoot/EA1.html
がサンプルのERDとなる。
また、実際にこれを利用したExampleがdbflute-mysql-exampleである。
https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-mysql-example
このExampleでは手動設定のclassificationDefinitionMapと
classificationDeployementMapは両方とも利用しないで区分値登録されている。
【補足2】
必須なものだけで記載すると以下のようになる。
[会員ステータス] $ MemberStatus - FML, Formalized - PRV, Provisional - WDL, Withdrawal