web-dev-qa-db-ja.com

六角形と比較したタマネギのアーキテクチャ

それらの間に違いはありますか(タマネギ|六角形)、私の理解から、それらはまったく同じであり、アプリケーションの中核であり、テクノロジー/フレームワークに依存しないドメインに焦点を当てています。

それらの違いは何ですか?

また、一方をもう一方よりも使用したり、N層アーキテクチャに対して使用したりしても、実際の利点はありません。

あるものを他のものよりも使用することの利点と、それを使用する理由は何ですか?いつそれを使用しますか?

ありがとう

14
MCR

それらの違いはありますか?

オニオン:層があり、依存関係は常に内側を向いています。つまり、層はその中の任意の層を使用できます。内側の層はドメインモデルで、外側の層はインフラストラクチャですが、層の数は異なる場合があります。

六角形(元の名前「Ports&Adapters」の代替名):レイヤーはありません。アプリケーション、ポート、およびアダプターがあります。ポートはアプリケーションに属し、アプリケーションのAPI/SPIです。アダプタはアプリケーションの外部にあり、各アダプタはアプリケーションのポートに依存しています。

一部の人々が混乱しているのは、六角形のアーキテクチャを実装する場合、ほとんどの人々がすべてのアダプターをアーティファクトに物理的に配置するのではなく、すべてを1つのアーティファクト(インフラストラクチャレイヤーなど)にまとめることです。また、使用するポートだけでなく、アプリ全体のアダプターに依存します。だから、実際にはタマネギになります。

六角形の右側を実装するには、アダプターを互いに分離する必要があり、すべてのアダプターは、使用/実装するポートのみに依存する必要があります(ポートがドライバーであるか駆動されるかによって異なります)。

もう1つの違いは、Hexagonalは六角形の内部の構造(アプリケーション)について何も言っていないことです。

一方を他方より使用する利点は何ですか?

六角形の利点は、よりモジュール式であり、コンポーネント間の明確な分離があり、コンポーネント間のコードの漏洩を防ぐことです。一方、玉ねぎはその意味でより危険です。たとえば、UIから直接データベースにアクセスできるためです(両者は同じレイヤーに属します)。

タマネギの利点は上記から得られます。六角形には多くのアーティファクトがあるため、プロジェクトが大きい場合、プロジェクト全体のビルドには多くの時間がかかります。

なぜそれを使用するのですか?いつそれを使用しますか?

どちらかを使用することのポイントは、テクノロジーやフレームワークを使用せずに、解決しようとしている実際の問題に集中することです。アプリケーションはテクノロジーに依存せず、フレームワークから別のフレームワークに簡単に移行できます。そのため、どちらも「クリーン」アーキテクチャと呼ばれます。フレームワークコード、注釈などのないアプリケーションコアがあります。

だから...なぜそれらを使用するのですか?

保守性、テスト容易性を改善し、クリーンなコードを持っているからです。

それらをいつ使用するか?

むしろ、それらを使用しない場合を言うべきです。開発しているアプリが複雑ではない場合、たとえばCRUDにすぎない場合、それらを使用するに値しないかもしれません。

個人的には、他のポートよりも「ポートとアダプター」が好きです。

私の説明が役に立てば幸いです。

20
choquero70

以前の回答では、オニオンアーキテクチャに関する根本的に誤った説明がなされています。彼らは「OnionではUIとデータアクセスは同じレイヤーの一部である」と断言しています。混乱は、すべてのレイヤーがその上下にあるすべてのものと話すことから生じる可能性があります。

実際には、オニオン図はオニオンアーキテクチャの貧弱な表現です。重要なポイントは、コアドメインレイヤーは周囲のレイヤーに依存しないことであり、通常、周囲のレイヤーも相互に依存しません。通常、これはUIがデータ層とドメイン層と通信するサービスと通信することを意味します。 UIは他のレイヤーと直接対話せず、レイヤーの対話は依存性注入とインターフェイス分離を使用して抽象化されます。

私の知る限り、データアクセスとUIの混合を推奨するアーキテクチャパターンはありません( Active Record 、ビジネスとデータアクセスの混合など)。別に、レイヤーを回避するコードを生成するテクノロジーがあります-迅速な開発ツールがこれを行うことがよくありますが、それらは設計と保守性よりも展開の速度を優先するツールです。

タマネギ、六角形、およびポートとアダプタは、実際にはすべて同じ概念アーキテクチャの異なる名前です。

Mark Seemanには、違いがある場合、それが限界的でセマンティックである方法を明確にするのに役立つ素晴らしい投稿があります: レイヤー、タマネギ、ポート、アダプター:すべて同じです

3
STW

階層化アーキテクチャとタマネギ関連のアーキテクチャファミリには違いがあります。階層化アーキテクチャは、ユーザーインターフェイスとデータアクセスレイヤー間の階層関係で動作します。対照的に、タマネギアーキテクチャでは、UIとデータアクセスは同じレイヤーの一部であると見なされます。

ユーザーインターフェースとデータアクセスが同じレイヤーにあるのはなぜですか?タマネギアーキテクチャの中心には、ビジネスロジックを持つドメインがあります。これが主な焦点です。ドメインは他のレイヤーの上にも下にもありません。それはまさに中心です。データリポジトリと同様に、ユーザーインターフェース、レストエンドポイントなどはドメインのセカンダリです。

ports and adapters architecture (六角形アーキテクチャの別名)は、その名前でこれを明確にします:ドメインと外部の間のインターフェースとして機能するポートはいくつでもあります。アダプターは、ポートがドメインと対話できるようにポートを実装します。

0
Markus Pscheidt