DDD
ドメイン駆動設計

ちょっとずつ読むドメイン駆動設計 第ニ部 モデル駆動設計の構成要素 第五章 ソフトウェアで表現されたモデル9(サービス)

サービス

正直、ほとんど使ったことがないです。

ふるまいは大方適切なオブジェクトに収まるし、それで困ったことがないですね。。。

とはいえ、今後も使わない可能性がないわけでもないので、特徴を押さえておきます。

注意1

ふるまいを適切なオブジェクトに当てはめることをあまりに早くあきらめ、徐々に手続き型プログラミングへと滑り落ちてしまうことだ。(第二部 第五章 より)

手続き型になってしまうのはDDDを諦めるということ。。。まずは、本当に、エンティティやバリューオブジェクトに当てはめるのが不自然かどうか・・・本当にサービスで良いのか考えましょう。

注意2

このサービスはドメイン層の一部です。ドメインの一部であり、モデルの一部です。

レイヤーアーキテクチャのアプリケーション層をサービスと呼ぶことがありますが、それとは違うということに注意しましょう。

逆に、アプリケーション層にビジネスロジックが書かれてしまうことがないかも注意しましょう。そのロジックはドメイン側のサービスではないか、それ以前にエンティティやバリューオブジェクトに適用できないか、検討しましょう。

特徴

  • 実態よりも活動。名詞より動詞で命名される事が多い。
  • 操作名はユビキタス言語を使う
  • 引数と結果はドメインオブジェクトであるべき
  • 状態はもたない

改めてサービスにするかどうかは慎重に検討しましょう。