Uploaded image for project: 'DBFlute'
  1. DBFlute
  2. DBFLUTE-337

{Java/C#}: 区分値定義を別リソースから取得できるようにする

XMLWordPrintable

    • Type: Icon: Improvement Improvement
    • Resolution: Fixed
    • Priority: Icon: Major 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
      

            Assignee:
            jflute jflute
            Reporter:
            jflute jflute
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: