Onion Architecture / オニオンアーキテクチャ

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

オニオンアーキテクチャは、ソフトウェアアプリケーションにおける関心の分離と依存関係の流れを強調するアーキテクチャパターンです。アプリケーションを複数の同心円状のレイヤーに組織化するという考え方に基づいており、中心のレイヤーは外側のレイヤーから独立しています。オニオンアーキテクチャの背後にある主な原則は、依存関係逆転の原則です。これは、高レベルのモジュールが低レベルのモジュールに依存してはならず、両方が抽象化に依存すべきであるというものです。

オニオンアーキテクチャのレイヤー

  1. ドメインモデル(コア)
    • コアのビジネスロジックとドメインオブジェクトを含みます。
    • 外部のフレームワークやテクノロジーから独立しています。
    • 外側のレイヤーから必要とするサービスのインターフェースを定義します。
  2. ドメインサービス
    • ドメインモデルレイヤーで定義されたインターフェースを実装します。
    • ドメインオブジェクトに自然に適合しないビジネスロジックを含みます。
    • ドメインモデルレイヤーに依存しますが、外側のレイヤーには依存しません。
  3. アプリケーションサービス
    • アプリケーションのワークフローを調整し、アプリケーションロジックを処理します。
    • ドメインモデルレイヤーとドメインサービスレイヤーに依存しますが、インフラストラクチャレイヤーやUIレイヤーには依存しません。
    • 必要とするインフラストラクチャサービスのインターフェースを定義します。
  4. インフラストラクチャ(外側のレイヤー)
    • 内側のレイヤーで定義されたインターフェースの実装詳細を含みます。
    • 永続化メカニズム、外部サービスとの統合、その他のインフラストラクチャの関心事が含まれます。
    • 内側のレイヤーに依存しますが、内側のレイヤーはインフラストラクチャレイヤーについて知りません。
  5. ユーザーインターフェース(外側のレイヤー)
    • アプリケーションのプレゼンテーション層(UIやAPI)を表します。
    • ユーザーのリクエストを満たすためにアプリケーションサービスレイヤーに依存します。
    • ドメインモデルレイヤーやドメインサービスレイヤーへの直接の依存関係はありません。

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

  • 関心の分離:オニオンアーキテクチャは、ドメインロジック、アプリケーションロジック、およびインフラストラクチャの関心事の明確な分離を強制します。
  • テスト容易性:内側のレイヤーは、外部のフレームワークやデータベースに依存せずに、簡単に単独でテストできます。
  • 保守性:外側のレイヤーの変更は内側のレイヤーに影響を与えないため、アプリケーションの保守性と進化性が向上します。
  • 柔軟性:外側のレイヤーを変更するだけで、コアのドメインロジックに影響を与えずに、アプリケーションを変化する要件やテクノロジーに容易に適応させることができます。

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

  • 学習曲線:開発者はオニオンアーキテクチャの背後にある概念と原則を理解する必要があり、学習と適応が必要になる場合があります。
  • 複雑さの増加:レイヤーの分離とインターフェースの使用により、特に小規模または単純なアプリケーションでは、コードベースに多少の複雑さが加わる可能性があります。

オニオンアーキテクチャの適用シーン

  • ドメイン駆動設計:オニオンアーキテクチャは、ドメインロジックをインフラストラクチャとアプリケーションの関心事から分離することを重視するため、ドメイン駆動設計(DDD)の原則とよく一致します。
  • 複雑なビジネスロジック:アプリケーションに複雑なビジネスルールとドメインロジックがあり、それらを分離して独立してテストする必要がある場合。
  • 長期的な保守性:オニオンアーキテクチャは、時間の経過とともに進化し、成長することが予想されるアプリケーションに適しています。保守性と柔軟性の高い構造を促進するためです。

オニオンアーキテクチャは、関心の分離、テスト容易性、および保守性を優先するアプリケーション設計への構造化されたアプローチを提供します。アプリケーションを同心円状のレイヤーに構成し、依存関係逆転の原則に従うことで、オニオンアーキテクチャはモジュール化された柔軟なソフトウェアシステムの構築を可能にします。

セキュリティ

まだありません
ローコード管理画面開発SaaSのクエリアなら

管理画面開発の4つの面倒ごとを省略

管理画面開発を高速化するクエリアの基本機能

UIコンポーネント

クエリアなら、ユーザーインターフェイスをデザインする必要はありません。管理画面や、業務ツールに必要なパーツはすでに用意されており、適切なパーツを適切な場所にドラッグ&ドロップするだけでインターフェイスを構築できます。
さらに詳しく見る

データフロー

リクエストを記述したり、ロジックを組んだりすることができるデータフローを使うことで、データソースから返ってきたたデータを表示することも、データソース内のデータを操作することも簡単にできるようになります。フローとして一連の処理をひとまとまりにすることで、複雑な操作も可能です。
さらに詳しく見る

権限管理

本来であれば複雑で大掛かりな開発が必要とされる権限管理機能も、クエリアなら楽に実現できます。どのユーザーがどのページにアクセスすることができるか管理することはもちろん、大切なデータソースに対しても、ユーザーごとにアクセス制限を設けることができます。また、権限グループ機能を使えば、特定の部署やチームごとに権限を管理することも可能です。
さらに詳しく見る

監査ログ

監査ログ
大切なデータに対して実行された処理を、ログとして閲覧することができます。いつ、誰が、どのページで、どのようなクエリを実行したのかを詳細に確認できます。また、ログはCSVフォーマットでダウンロードすることで、必要な人に送ったり、表計算ソフトなどでの分析に活用することも可能です。
さらに詳しく見る