【オニオンアーキテクチャ】
オニオンアーキテクチャ とは?
最終更新:
💡 タマネギの中心に、守りたい業務ルール
業務のモデルを中心に置き、ソースコードの依存を外側から内側へ向ける設計。UIやデータ保存の実装を外側に置き、中心のルールを具体的な技術から切り離す。
📌 このページのポイント
- 中心に、業務の状態と振る舞いを表すモデルを置く
- コードは内側を参照できるが、内側から外側を参照しない
- 内側のインターフェースを外側の実装が満たす
- 層の数は固定ではなく、複雑さに合わせて設計する
どうしてタマネギなの?
中心をいくつかの層が囲む形で説明するからだよ。中心には、注文や料金など業務の状態と振る舞いを表すドメインモデルを置く。外側には、画面やデータ保存などの具体的な実装を置くんだ。層の数は、どのアプリでも同じではないよ。
普通にUI・業務・DBを分けるのと、何が違う?
区切るだけでなく、ソースコードが何を参照するかを決めるんだ。業務ルールが特定のDB操作に直接依存していると、保存方法の変更が業務のコードにも広がりやすい。オニオンでは、外側が内側に依存し、内側は外側の具体的な技術を参照しないようにするよ。
DBを知らないのに、どうやって注文を保存するの?
DBを変えても、変更はゼロ?
外側の変更を中心へ広げにくくする設計であって、変更が必ずゼロになる保証ではないよ。保存形式や要件が変われば、検討やテストも必要。ただ、業務ルールを外部の実装から分けておくと、中心の振る舞いをDBなしで確認しやすくなるんだ。
小さなアプリにも使ったほうがいい?
構造を増やす負担と、将来の変更への効果を考えよう。提唱者のJeffrey Palermoは、2008年の記事で、長く使う業務アプリや複雑な振る舞いを持つアプリを想定しているよ。六角形やクリーンアーキテクチャとも共通する考え方はあるけれど、名前だけで全部同じ構造と覚える必要はないんだ。
まとめ:ざっくりこれだけ覚えればOK!
「オニオンアーキテクチャ」って出てきたら「業務ルールを中心に置き、コードの依存を内側へ向ける設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Onion Architecture」 = 玉ねぎアーキテクチャ
💬 Jeffrey Palermoが2008年に提唱したよ。層を重ねた構造がタマネギに見えることからこの名前がついたんだよ