Re: 「新しいオブジェクトを作成する必要があるときに、基になる ORM を呼び出す方法」
AGGREGATE ROOT と REPOSITORY パターンのアイデアを調べたことがありますか - それらは役に立つかもしれません。
大まかな要約として: AGGREGATE ROOT は、システム内でグローバルに一意の ID を持つ「エンティティ」です。ほとんどの場合、これらは、アプリケーションが「id で」グラブする必要がある唯一のオブジェクトです。それらは、アプリケーションの起動/ブートストラップ時にデータ層を認識するために通常初期化される REPOSITORY を通じて検出されます。
AGGREGATE ROOT の FACTORIES も、通常、アプリケーションの起動/ブートストラップ時にデータ層を認識するために初期化されます。
その後、リポジトリは、オブジェクトのデータを掘り起こすプロセスを任意の方法で仲介できます。REPOSITORY は生データを取得するためにデータレイヤー/マッパーに委譲し、オブジェクト再構成の実際のジョブを FACTORY (クラス / メソッド) に委譲して構築を行う傾向があります。その後、REPOSITORY は新しく再構成された AGGREGATE ROOT オブジェクトまたは (コレクション- of) REPOSITORY の find メソッドを呼び出したクライアント、つまりアプリケーションに。REPOSITORY は、AGGREGATE ROOT を取得して保存するためのインターフェイスであり、メモリ内に格納されているそれらの動作を提供します。
ただし、アプリケーションは FACTORY を直接使用して、まったく新しい AGGREGATE ROOT オブジェクトを作成する場合があります。
AGGREGATE ROOT の Factory は、ORM/Mapper Layers について十分な知識を持っており、新しいエンティティの作成時に、ある種の「数列オブジェクト」のサービスを呼び出して一意の ID を取得する場合があります。
AGGREGATE ROOT は、通常、「グローバルに知られている ID で検索」する必要がある唯一の種類のドメイン オブジェクトです。これは、他のドメイン オブジェクトが次のいずれかであるためです。
- 使い捨て価値のあるオブジェクト - お金の価値など、または
- 'AGGREGATE ROOT 依存' エンティティ。つまり、次のことを意味する AGGREGATE ROOT のコンテキスト内でのみ一意の ID を持つオブジェクト
- AGGREGATE ROOTは、実際にそれを見つけて使用する必要がある唯一のものであるべきです-内部的に
- それらは、AGGREGATE ROOT の ORM マッパーを使用して見つけることができます。
- それらの ID は、コンテキスト/スコープを定義する AGGREGATE ROOT によって作成できます。
参考文献:
ドメイン駆動設計、Eric Evans を参照してください。
集約ルート:
http://books.google.co.uk/books?id=7dlaMs0SECsC&lpg=PP1&dq=domain%20driven%20design&pg=PA147#v=onepage&q=&f=false
リポジトリ:
http://books.google.co.uk/books?id=7dlaMs0SECsC&lpg=PP1&dq=domain%20driven%20design&pg=PA147#v=onepage&q=&f=false