DDD
ドメイン駆動設計

ちょっとずつ読むドメイン駆動設計 第ニ部 モデル駆動設計の構成要素 第四章 ドメインを隔離する6

前々回前回でレイヤアーキテクチャ・DIを使う・ ヘキサゴナルアーキテクチャについて読み進めました。
他の選択肢について

他の選択肢 オニオンアーキテクチャ

Jeffrey Palermoが2008年に提唱したアーキテクチャです。

オニオン (1).png

ヘキソゴナルアーキテクチャと似てますね。
特徴は

  • 依存関係は外側が内側に依存します。(もちろんそうするためにDIが必要となります)
  • 外側は内側であればどの層に依存してもいいです。すぐ内側のみということではないです。
  • ドメインサービスという層というのは、JefferyのブログによるとDDDで言うところのRepository(インターフェイス)を集めた層のようです。
  • 実装の仕方は内側にインターフェイス、外側にそのインターフェイスを実装します。
  • アプリケーションCoreは様々と言っているので、必ずしもこの通りにしなければならないわけではないようですが、必ずドメインとその他(UI/インフラストラクチャ/テスト)を分離させます。
  • アプリケーションCoreとその他は別々にコンパイル・実行できるようにする。

Repositryをドメインから分離するのはどうなんだろうとは思います。モデルのライフサイクルも大事なドメインの知識のような気がしますが・・・とは言え、アプリケーションCoreの中にありますし、アプリケーションCoreもこの通りでなければならないというわけでもないようなので考え方の一つとしてはいいかなという感想です。

オニオンアーキテクチャもヘキソゴナルアーキテクチャもその意図は何度も書いているような気がしますが、ドメインを隔離することにあります。
自分的にはそれさえ実現すればどんなアーキテクチャでもうまく行くような気がしていますが、他のアーキテクチャの選択肢としてClean Architectureというのが残っているので明日また読み解きます。