home wiki.fukuchiharuki.me
Menu

* キーワード [#cc360d0c]
- エンティティ
- 永続化
-- ストア
-- リストア

* 何か [#r660635d]

 転送装置

インスタンスの永続化に関わる処理をするための専用クラスを設けます。

* なぜか [#tfe8b634]

データベースに接続してオブジェクトを検索しインスタンスを生成する手順は複雑です。しかしこの手順はドメインモデルにおける責務とは別のところにあります。ドメインモデルにおける責務はオブジェクトがデータベースから復元された状態で考えるからです。別の言い方をするとオブジェクトがデータベースにあるのかファイルにあるのかという問題ではないからです。

- 複雑な手順
- ドメインモデルにおける責務の外

そこで、データベースからオブジェクトを検索しインスタンスを生成する、あるいは逆にインスタンスをデータベースに保存することを専門の責務にするクラスを設けます。これをリポジトリと呼びます。

- データベース処理の隠ぺい

* どのように [#u2facc05]

リポジトリを通じてエンティティを得るようにします。

 UserEntityRepository repository = new UserEntityRepository();
 List<UserEntity> users = repository.findByBloodType("B");

リポジトリは複雑なデータベース処理を隠ぺいします。

 UserEntityRepository {
 
   findByBoodType(bloodType) {
     List<UserEntity> users = new ArrayList<UserEntity>();
     /*
      * データベースからエンティティを復元するための手続き
      */
     return users;
   }
 
 }

* 関連 [#n2b3305b]
- [[設計パターン/ファクトリ]]

* 参考 [#ecb23b96]
- [[ドメイン駆動設計・アプリケーション構築編・リポジトリ - Strategic Choice>http://d.hatena.ne.jp/asakichy/20110601/1306879805]]