クリーンアーキテクチャについて
業務でクリーンアーキテクチャを触ることがあったのでメモ。
クリーンアーキテクチャとは?
内側にいくにつれてビジネスロジックに近づいていく。
クリーンアーキテクチャにも色々あり、ヘキサゴナルアーキテクチャ、オニオンアーキテクチャなどがある。また、ドメインロジックを重視するという意味ではDDD(ドメイン駆動設計)と親和性が高い。
複雑で大規模なシステムでGoやjavaで採用されるイメージだが、laravelなどでも採用されることがある。
メリット
各層が明確に分離されているため、
- テストが書きやすい(ビジネスロジックが独立しているため、ユニットテストがしやすい)
- 拡張性(新しい機能の追加が既存のコア部分に影響を与えにくい)
- 保守性(変更・メンテナンスしやすい)
- フレームワークやデータベースなども変更しやすい
というメリットがある。
ruby on railsなどのMVCだとコントローラーに処理を書きすぎていわゆるfat controllerになりやすいと言われるが、それを防ぐことができる。
設計原則
- 依存性逆転の原則
高レベルのモジュールは低レベルのモジュールに依存してはいけない - インターフェース分離の原則
各層の責任を明確にし、変更の影響範囲を限定
レイヤー構成
-
エンティティ(ドメインモデル)
ビジネスルールや業務ロジックを表現
ユーザー、商品、支払いなどのドメインオブジェクト -
ユースケース(アプリケーション層)
ユーザー認証や注文処理など、システムの具体的な振る舞いを定義 -
インターフェース(アダプター層)
外部との通信や入出力を抽象化
WebAPI, コントローラー、DBリポジトリなど -
フレームワーク(外部層)
Webフレームワーク、DB、UIなどの技術スタック
フレームワークも柔軟に変更可能。