🧅

オニオンアーキテクチャについて調べてみた

2022/09/18に公開

そもそもソフトウェアアーキテクチャとは

・抽象化と問題の分割によって複雑性を減らすことを主に念頭に置いたもの
・「ソフトウェアアーキテクチャ」という用語に関して、万人が合意した厳密な定義は存在しない

ソフトウェアアーキテクチャを導入する意義とは?

・アーキテクチャを元にシステムの構成が把握しやすくなる
・システムの拡張や変更が容易になる
・品質の担保がしやすい
etc...

OnionArchitecture

・設計思想はCleanArchitectureと同じ
・全ての依存関係は円の中心の層に対して向かう
・依存性を逆転させてドメインを中心に置く

Appication Core

・外部依存を意識せず内部ロジックに集中できる

Domain Model

・ビジネスロジックやドメイン制約といったドメイン固有の振る舞い

Domain Service

・複数のモデルにまたがるビジネスロジックに関わる振る舞い
・RepositoryのInterface

Application Service

・アプリケーション固有のロジックを担う
・QueryService、CommandServiceなどもこのレイヤー

UI,Infrastructure,Tests

Presentation

・クライアントとのやりとりを行う
・APIだけでなく、BatchやWorkerのインタフェースも担う

Infrastructure

・DBやStorage、外部APIといった外部とのやりとりを行う

オニオンアーキテクチャの利点と欠点

利点

・アプリケーションアーキテクチャはドメインモデルの上に構築される
・柔軟で持続可能
・アプリケーションコアは何にも依存しないため、すばやくテストできる

欠点

・頻繁に使用されるインターフェース

最後に

・オニオンアーキテクチャは業界で広く受け入れられている
・他の2つのアーキテクチャスタイル(レイヤード、ヘキサゴナル)と密接に関連
・アーキテクチャを適用するかどうかは検討する必要がある

参考

https://qiita.com/Jazuma/items/cae61c78f240ed013598

https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/

https://www.codeguru.com/csharp/understanding-onion-architecture/

https://zenn.dev/sterashima78/articles/e403fc0fe0e96a

https://www.itnetinc.co.jp/ITPMopinion/SoftwareArchitecture.htm#:~:text=あるソフトウェアの構造設計,であると言えます。

https://little-hands.hatenablog.com/entry/2019/12/02/cqrs

https://www.youtube.com/watch?v=cnOAO4IrKRI&t=4s

Discussion