思考と現場の間で

「いいサービスづくり」のために、組織づくりやソフトウェア設計など、考えていることを書きます

【DDDメモ】サービス

エリック・エヴァンス ドメイン駆動開発P.104 ソフトウェア表現されたモデル サービス

 ドメインから生まれる概念の中には、オブジェクトとしてモデル化すると不自然なものもある。こうしたドメインで必要な機能をエンティティや値オブジェクトの責務として押し付けると、モデルに基づくオブジェクトの定義を歪めるか、意味のない不自然なオブジェクトを追加することになる。
【中略】
優れたサービスには3つの特徴がある

  • 操作がドメインの概念に関係しており、その概念がエンティティや値オブジェクトの自然な一部ではない。
  • ドメインモデルの他の要素の観点からインターフェースが定義されている。
  • 操作に状態が無い。

【中略】
ドメインにおける重要なプロセスや変換処理が、エンティティや値オブジェクトの自然な責務ではない場合、その操作は、サービスとして宣言される独立したインタフェースとしてモデルに追加すること。モデルの言語を用いてインタフェースを定義し、操作名が必ずユビキタス言語の一部になるようにすること。サービスには状態を持たせないこと。

 サービスの責務は、気を抜くとどんどん大きくなる。エンティティや値オブジェクトの責務をサービスに書いてしまう。それは、どうしても仕様を手続き的に分析し、それをもとにサービスを書いていくという点がある。そうならないよう、ドメインモデルとユースケースや業務フローと行ったり来たりしながら、モデルにフィードバックをしていく必要がある。