Open6

アーキテクチャメモ

sassysassy

レイヤードアーキテクチャ

  • 「ユースケースを実現する層」と「ドメイン知識を表現する層」の 2 つに分割
  • 依存関係は上の層から下の層のみ
  • アプリケーション層でユースケースの実現
  • ドメイン層でドメイン 知識の表現

sassysassy

レイヤードアーキテクチャの問題点

  • ドメイン層がインフラ層に依存してしまう
  • 特定の DB や OR マッパーに依存した実装になってしまう
  • ドメイン層自体が特定のインフラ技術に依存
  • ドメイン層は特定のインフラ技術に依存せず、独立した実装にしたい
sassysassy

オニオンアーキテクチャ

  • レイヤードアーキテクチャから、依存関係逆転の原則を用いてドメイン層とインフラ層の依存関係を逆転
  • リポジトリはインターフェイスをドメイン層に、実装クラスをインフラ層に定義
  • ドメイン層を特定の技術に依存させず、独立した層として実装できる
sassysassy

ヘキサゴナルアーキテクチャの理解

  • アプリケーションと外部とのやりとりを、PortとAdapterでやりとりするイメージ
  • ポートアンドアダプターアーキテクチャと言った方が適切かも