【オニオンアーキテクチャ】

オニオンアーキテクチャ とは?

💡 タマネギのように層を重ね、中心のビジネスルールを外の都合から守る設計
📌 このページのポイント
オニオンアーキテクチャ(同心円構造) インフラ層(DB・UI・外部API) アプリケーションサービス層 ドメインサービス層 ドメイン モデル 依存 方向
依存の方向は常に外側から内側へ。中心のドメインモデルは何にも依存しない
ひよこ ひよこ

オニオンアーキテクチャって、タマネギと何か関係あるの?

ペンギン先生 ペンギン先生

構造がタマネギの断面みたいに見えるんだよ。一番内側にドメインモデル、その外側にドメインサービス、さらに外側にアプリケーションサービス、一番外側にUIやDBが来るんだ

ひよこ ひよこ

それって普通の層構造と何が違うの?

ペンギン先生 ペンギン先生

普通の層構造はUIからDB方向へ依存が流れるよね。でもオニオンは「依存は常に内側へ」というルールがあって、DBがドメインに依存する形になるんだ。つまりビジネスロジックがDBを知らなくていいんだよ

ひよこ ひよこ

DBがドメインに依存するって、逆じゃないの?

ペンギン先生 ペンギン先生

そう感じるよね。でも考えてみて。ビジネスルール(例えば「注文は3個まで」)はDBの種類に関係ないよね?だからドメインはDBを知らなくていい。DBはドメインインターフェースを実装する立場になるんだよ

ひよこ ひよこ

なるほど、ビジネスロジックが一番偉いんだね!

ペンギン先生 ペンギン先生

まさにそう!この設計の一番のメリットは、PostgreSQLMySQLに替えてもドメインに影響しないこと。テストも外側のインフラなしで内側のロジックだけ単体テストできるんだよ

ひよこ ひよこ

クリーンアーキテクチャとはどう違うの?

ペンギン先生 ペンギン先生

ほぼ同じ思想だよ。クリーンアーキテクチャはロバート・マーチンが、オニオンはジェフリー・パレルモが提唱したけど、「依存は内側へ」「ドメインを中心に置く」という核心は共通なんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「オニオンアーキテクチャ」って出てきたら「ドメインを中心に外側から依存する同心円構造」と思えればだいたいOK!
📖 おまけ:英語の意味
「Onion Architecture」 = 玉ねぎアーキテクチャ
💬 Jeffrey Palermoが2008年に提唱したよ。層を重ねた構造がタマネギに見えることからこの名前がついたんだよ
← 用語集にもどる