LoginSignup
1
0

More than 5 years have passed since last update.

ちょっとずつ読むドメイン駆動設計 第三部 より深い洞察へ向かうリファクタリング 第九章 暗黙的な概念を明示的にする7 選択・要求

Last updated at Posted at 2017-11-08

仕様(Specification)

前回仕様について読んでいくなかで、仕様パターンには、

  • 検証
  • 選択(問い合わせ)
  • 要求(生成)

の3つのパターンがあるということでした。検証まで読んだので、選択・要求について読んでいきます。

選択(問い合わせ)

コレクションから、一部を選び出すというものですね。

コレクションがメモリ上にあるか、RDB上にあるかというはここでは問いてはないですね。クライアントからはどちらか意識しなくていいように実装するのはRepositoryの章で読んだとおり。

例では、Repositoryに仕様オブジェクトを渡してSQLを返したり、仕様オブジェクトにRepositoryを渡して選択されたコレクションをRepositoryから取得するとかしています。

自分がよく実装しているパターンは選択の条件をまとめた「Criteria」クラスをRepositoryに渡して、インフラストラクチャ層でCriteiraを元にSQLを構成、実行し、コレクションを返すといったことをしています。

SQLを組み立てる支援があるツール(MyBatisなど)を利用すれば、容易に実装が可能です。

Criteriaが仕様クラスになる感じですね。

要求(生成)

要求は生成時に条件を指定して、条件に従ったオブジェクトを生成するというパターンですね。

書籍の例では、コンテナにどんな化学製品を入れるかによって、別々のコンテナを生成するといった例が上げられています。

こちらも条件をコンテナ自体が持つのではなく、コンテナ仕様クラスが持つということをしていますね。

コラム:動くプロトタイプを使って開発の停滞を解消する

この章の最後に表題とは無関係ながら、面白いコラムが載っていたのでご紹介。

他のチームの実装を待ったり、ユーザーからのフィードバックを待ったりする停滞を避けるため、インターフェイスを活用して、実装と分けることで、一旦動くプロトタイプを作成しておいて、後からしかるべき実装に置き換えるといったことが紹介されています。

こういうのを活用すればなかなか分離しにくいユースケースやストーリも分割して進められることができますね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0