実践ドメイン駆動設計 (Object Oriented Selection)
- 作者: ヴァーン・ヴァーノン,高木正弘
- 出版社/メーカー: 翔泳社
- 発売日: 2015/03/17
- メディア: 大型本
- この商品を含むブログ (2件) を見る
- 作者: ヴァーン・ヴァーノン
- 出版社/メーカー: 翔泳社
- 発売日: 2015/03/19
- メディア: Kindle版
- この商品を含むブログを見る
実践ドメイン駆動設計 第7章
- ドメインにおけるサービス
- そのドメインに特化したタスクをこなす
- ステートレスな操作
- 集約や値オブジェクトのメソッドにするのは場違いと感じたときにつくる
- 集約ルート上にstaticメソッドを作りたくなったとき => サービスのつくりどき
- SaaSOvationの例
7.1 ドメインサービスとはなにか(…の前に、ドメインサービスとは何でないのか?)
- サービスで思い浮かべるもの
- ドメインサービス
- ドメインサービスもドメインモデルと同様
- エンティティや値オブジェクトに属するものではないとみなすためには?
- サービスはステートレスにする
- ユビキタス言語に沿ったインタフェースを持つ
7.2 本当にサービスが必要なのかを確かめる
- なんでもかんでもサービスとしてモデリングしてはいけない
- 認証の例
- システムのユーザーは、認証済みである必要がある。ただし、テナントがアクティブなときしか認証できない
- 本の例での問題点
- 次の例の問題点
- テナントがアクティブかはチェックしているが、認証の仕組みをクライアント側が知っておくべきこと以上の知識を要求している
- Tenantがパスワードの扱いを知らなければならなくなった
- パスワードは暗号化して格納する必要がある => テナントで暗号化する必要がある?
- 考えられる4つの手法
- クライアント側にドメイン固有の知識を漏らしてはいけない
7.3 ドメインにおけるサービスのモデリング
- ドメインサービスのモデリングは非常にシンプル
- サービスにセパレートインタフェースを持たせるべきかどうかを判断
- 上記OKならインタフェースをもたせる
- 認証に係る集約と同じモジュールで行う => 認証に関する概念であるから
- 実装はドメインモデルの外部に置く
- ここではインフラストラクチャレイヤのモジュールに配置する
- 実装上の注意点 nullのガード
セパレートインタフェースは必須なのか
- 必ずしも必須ではない
- テナントによっては特殊なセキュリティ標準を求めるところがあるかもしれない
- セパレートインタフェースが有用なのは、分離したいというゴールがある場合
- DIやサービスファクトリを使っている場合は、分離しなくてもクライアントは実装を気にせずにすむ
- コンストラクタを使ったり、メソッドのパラメータとして依存関係を設定する人もいる
- 本書はDomainRegistry(ファクトリ)を使っているが必ずしも推奨するものではない
計算プロセス
- アジャイルプロジェクト管理コンテキスト
- 特定の型の集約から取得した値を任意の数だけ使って、結果を計算する
- staticメソッドからドメインサービスへ
- ドメイン内のサービスは必要に応じてリポジトリをつかえる
変換サービス
- より技術的なドメインサービスの実装で、明らかにインフラストラクチャに属するものは、統合の際に使われる
- 13章境界づけられた婚的との統合参照
ドメインサービスのミニレイヤの仕様
- ドメインモデルのエンティティや値オブジェクトの上に、ドメインサービスの「ミニレイヤ」をかぶせたくなるときがある
- トランザクションやセキュリティはアプリケーションの関心ごととして、アプリケーションサービスで対応するものであり、ドメインサービスで対応するものでない
7.3 サービスのテスト
- ここまで作ったモデルがユーザの視点でつかえるものになってるか?
- ドメインに注目したテストでそのモデルがどのように使われるかのかを反映させる
- ユーザがわかるテスト
- 正常系
- アプリケーションサービスのクライアントからどのように使われるかをテストで示す
- リポジトリは完全な実装でもモックでもいい
- ここはおまかせ
- 異常系
- ここでは間違ったTenantID、ユーザ名、パスワードをそれぞれ渡す
- 認証失敗したケースではUserDescriptorがnullになる
- これはクライアントが知るべき詳細
- 例外でなくnullを返すので、認証に失敗することはドメインの通常の動作のひとつにすぎないということを表している
- これだけではテストは不十分
- テナントがアクティブでない場合などがある
7.5 まとめ
- ドメインサービスは使いすぎてはいけない
- 用法用量は適切に
- テストはサービスの使い方を、うまく示せるようなテストを提供する
メモ
昨日の関西DDD.javaスタートアップの話を聞いてから、この第7章読むと、他の章よりあまり長くない理由がわかった気がする。そのドメインモデルに係るビジネスロジックを集めるべきで、サービスはそこから外れるけどアプリケーションサービスに漏れてはいけないビジネスロジックをうまくドメイン層に閉じ込めるためのツールだ。ということを念頭に置くと、今のプロジェクトでServiceと名付けて使ってるものはちょっと違うなぁ。これはリファクタリング対象だな。
エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)
- 作者: エリック・エヴァンス,今関剛,和智右桂,牧野祐子
- 出版社/メーカー: 翔泳社
- 発売日: 2011/04/09
- メディア: 大型本
- 購入: 19人 クリック: 1,360回
- この商品を含むブログ (130件) を見る
- 作者: Eric Evans
- 出版社/メーカー: 翔泳社
- 発売日: 2013/11/20
- メディア: Kindle版
- この商品を含むブログ (3件) を見る