Specification

JUDEファイルの配置

  • JUDEファイルはRAILS_ROOT/app/models配下に配置する。
    • 正確に言うと、Dependencies.load_paths(Railsの設定パラメータconfig.load_pathsで修正可能)のパス群のどこかにJUDEファイルを配置すれば動作するが、RAILS_ROOT/app/models配下に配置することを強く推奨する。

  • JUDEファイルのファイル名は自由に決めて構わない。
  • 1つのRailsプロジェクトに対して1つのJUDEファイルのみ利用可能。複数ファイルを配置したときの動作は保証しない。

Railsモデルの動的生成

  • 現状はクラス図に記述したクラスがRailsモデルの対象になる。
    • 近い将来ER図も対応予定
  • クラス図内のクラスの中で、以下の条件を満たすものがRailsモデルとなる。
    • JUDEファイル作成時にすでに存在するjava.lang,java.util配下のクラス以外
    • テーブルの列の型になるクラス以外
    • 関連クラスはRailsモデルにはならない。(将来は対応予定)
  • 上記に示したRailsモデルの条件はConfiguration でカスタマイズ可能
  • モジュールで階層化されたモデルは現在未対応。

リレーション

  • クラス図に記述したリレーションもRailsに反映する。
  • リレーションに対してプラグイン側で以下のルールに従い方向性が決定される。この方向性によりクラスの親子関係が決定づけられる。
    • 集約、コンポジションを指定した場合、集約側が親となる。
    • 上記以外の場合、リレーションをドローイングしたときに先に指定したクラス(起点側)が親となる。
  • 本プラグインでは多重度は『1』,『多』のどれかに分類される。多重度の決定ルールは以下。
    • 多重度を指定しない場合は『1』
    • 多重度が1以下の場合は『1』
    • 多重度が2以上、または*の場合は『多』
  • 上記で示したリレーションの方向性と多重度で、クラス間の関係が決定される。クラス間の関係には『1対1』、『1対多』、『多対多』がある。
    • 『多対1』はクラス間に関係はないと判断されるので注意。
  • 関連端名を指定するとRailsに反映する。反映される内容は以下。
    • 内部で生成されるクラスのhas_one,has_many,belongs_to,has_and_belongs_to_many等の値
    • テーブルの外部キー名

継承

  • クラス間の継承関係もRailsに反映する。
  • 継承関係のテーブルへのマッピング方式は単一テーブル継承[STI:Single-Table Inheritance]。
  • 多重継承は未サポート。定義した場合の動作は保証しない。
  • 抽象クラスは未サポート。抽象クラスを定義しても本プラグインでは無視される。

テーブル

  • テーブルの作成方法としてRake Task を提供している。
  • JUDEで定義したクラスの属性は、作成されるテーブルの列に反映される。
  • 列名はJUDEで定義した属性名をString#underscore化した値となる。
  • 以下のマッピング表に従いテーブルの列の型が決定される。
    • JUDEクラス属性のクラス名は大文字が含まれていてもよい。また、JUDEクラスはパッケージに含まれていても構わない。例えばjava.lang.Stringはstringにマッピングされる。
    • マッピング表にあてはまらない場合自動的にstringとなる。
Railsが定義している型 JUDEクラス属性のクラス名
binary ‘binary’,’blob’,’image’
boolean ‘boolean’
datetime ‘datetime’, ‘date’
decimal ‘decimal’
float ‘float’
integer ‘integer’, ‘int’, ‘number’
string ‘string’,’varchar’,’varchar2’,’char’
text ‘text’,’clob’
time ‘time’
timestamp ‘timestamp’
  • 上記マッピング表はConfiguration でカスタマイズ可能
  • JUDEのクラス属性に初期値を付与すると、列のdefault値に反映される。

  • JUDEのクラス属性の制約に『not_null』を定義すると、その列にはnot null制約が付与される。

  • JUDEのクラス属性のタグ付き値に『limit』を指定すると、テーブル作成時のlimit値に反映される。

  • decimal型の場合、JUDEのクラス属性のタグ付き値に『precision』、『scale』を指定すると、テーブル作成時にこれらの値が反映される。

  • 作成されるテーブルにはクラス間のリレーションを成立させるための列が付与される。