2009年6月27日土曜日

関連の格納方法

オブジェクト間の関連の格納方法について考えている。




  • 同じエンティティにまとめる範囲、エンティティ・グループにまとめる範囲
  • 連鎖削除ありなし
  • 同時ローディング、オンデマンド・ローディング
  • 検索対象、対象外
  • DataStoreデータ型で格納する。それ以外のデータ型はString、Textなどにエンコーディング。Javaプログラム上の表現とJDO格納表現がずれるで注意。
  • オブジェクト間に関連については関連、集約、合成、部品で処理方法を調整
  • 属性(attribute)
    • document(またはvalue)をエンティティの属性とする
    • エンティティのカラムに(必要に応じてテキスト、XMLエンコーディングして)格納

  • 関連(association)
    • エンティティ間で連鎖削除はしない
    • エンティティは独立して管理
    • エンティティをロードする時に、関連先エンティティはロードしない。使用時にオンデマンドでロードする。

  • 集約(aggregation)
    • 全体エンティティが削除されても部品エンティティは削除されない
    • 全体エンティティと部品エンティティは独立して管理
    • 全体エンティティをロードする時に、部品エンティティはロードしない。使用時にオンデマンドでロードする。

  • 合成(composition)
    • 全体エンティティが削除されると部品エンティティも削除される
    • 全体エンティティをロードする時に、部品エンティティをロードする。
    • 全体エンティティと部品エンティティでエンティティ・グループを構成する。

  • 部品(part)
    • 部品エンティティはエンティティIDを持たない
    • エンティティのステレオタイプとしてpartを用意(DSLでは定義済み)
    • partは、全体エンティティの部品として使用するオブジェクト
    • 検索対象から外すことによって、全体エンティティのカラムにXMLエンコーディングして格納


2009年6月25日木曜日

SimpleModeler 0.1.8

SimpleModelerは、地道にバージョンアップしていて0.1.7と0.1.8をリリース。

http://code.google.com/p/simplemodeler/
http://code.google.com/p/simplemodeler/downloads/list

現在はGoogle App Engine/Java向けにデータ型まわりを実装中。

以下つぶやき。

Entityの部品をEntityの一部として扱いたい。

Entityの部品をJavaオブジェクトをシリアライズして格納すると持続性に問題がある。

Domain Model - Java - JDO(GAEJ)のギャップを地道に埋めていく。

JDOの基本データ型。これ以外のデータ型も使えないことはないが、できれば使わない方がよい。
  • java.lang.String
  • com.google.appengine.api.datastore.ShortBlob
  • boolean
  • java.lang.Boolean
  • short
  • java.lang.Short
  • int
  • java.lang.Integer
  • long
  • java.lang.Long
  • float
  • java.lang.Float
  • double
  • java.lang.Double
  • java.util.Date
  • com.google.appengine.api.users.User
  • com.google.appengine.api.datastore.Text
  • com.google.appengine.api.datastore.Blob
  • com.google.appengine.api.datastore.Key