建築パターンと建築スタイルの違いは何ですか?
-
08-10-2019 - |
質問
の ソフトウェアアーキテクチャ - 財団、理論、実践, 、両方の定義を見つけることができます。問題は、私がそれらのそれぞれが平易な英語で何を意味するかを理解していないことです:
建築パターン
アーキテクチャパターンは、その問題が現れるさまざまなソフトウェア開発コンテキストを説明するためにパラメーター化された繰り返しの設計問題に適用される建築設計決定の名前のコレクションです。
建築スタイル
建築スタイルは、(1)特定の開発コンテキストで適用される建築設計上の決定の名前が付けられたコレクションであり、(2)そのコンテキスト内の特定のシステムに固有の建築設計上の決定を制限し、(3)それぞれの有益な質を誘発する結果のシステム。
それぞれとはどういう意味ですか、そしてそれらの違いは何ですか?
解決
建築パターンは、繰り返しの建築上の問題を解決する方法です。たとえば、MVCは、UIをモデルから分離する問題を解決します。センサーコントローラーアクチュエーターは、いくつかの入力感覚に直面して作動する問題に役立つパターンです。
一方、建築スタイルは、繰り返しの建築設計に与えられた名前です。パターンに反して、問題を「解決」することは存在しません。
Pipe&Filterは特定の問題を解決しません。これは、コードを整理する方法にすぎません。クライアント /サーバー、メインプログラム、サブルーチンおよび抽象データ型 / OO、同じ。
また、単一のアーキテクチャにはいくつかのアーキテクチャスタイルを含めることができ、各アーキテクチャスタイルはいくつかのアーキテクチャパターンを利用できます。
他のヒント
率直に言って、私は常にこれらの両方の用語が同義語であると考えてきました!そして、素人(比較的言えば)文学は間違いなくそれらをそのように扱っています。参照 MSDN また ウィキペディア
しかし、あなたの質問は私に少し興味をそそられたので、私はもう少し掘り下げて率直に言いました...私は参照を除いて多くを見つけることができませんでした エンタープライズアーキテクチャの実用ガイド(COADシリーズ), 、私が引用してください: -
An architectural style (Base et al. 1997) and an architectural pattern
(Buschmann et al. 1996) are essentially synonymous.
さらにいくつかに基づいています グーグル, 、これは私が2つを区別する1つの可能な方法かもしれないと思うものです
- アーキテクチャスタイルは、システムがどのように作成されるか /動作する概念的な方法です
- アーキテクチャパターンは、サブシステムまたはモジュールのレベルでスタイルを実装するためのソリューションとその関係を説明しています。
建築パターンがどのように設計パターン、つまりアダプター、オブザーバーはそれらが適用される粒度のレベルによって異なります(これは質問の一部ではありませんが、それは関連していると思います)
非常に簡単な言葉で:
建築スタイル 抽象的なIE概念です。
+---------------+--------------------------------------------------------+
| Category | Architecture styles |
+---------------+--------------------------------------------------------+
| Communication | SOA, ROA, Message Bus |
| Deployment | Client/Server |
| Domain | Domain Driven Design,Monolithic application |
| Structure | Component-Based, Object-Oriented, Layered, Plug-ins |
+---------------+--------------------------------------------------------+
建築パターン 建築スタイルの具体的な実装です。
- 例:3層、nティア、MVC、休憩
デザインパターン 建築レベルでのソフトウェア設計で一般的に発生する問題に対する一般的な再利用可能な解決策です。
- 例:工場、シングルトン、プロトタイプ。
類推: さまざまな宗教のための寺院の建築スタイル:
私の見解では、パターンと建築スタイルは、設計の専門知識をカプセル化するための補完的なメカニズムです。アーキテクチャスタイルは、ビルディングブロックを作成するためのビルディングブロックのデザイン要素、ルールと制約のコレクション、およびスタイルで作成されたデザインを分析および操作するためのツールを提供します。スタイルは一般に、特定のドメインで幅広いクラスのアーキテクチャを構築するためのガイダンスと分析を提供しますが、パターンは、特定のスタイル(またはおそらく複数のスタイル)内でより小さく、より特定の問題を解決することに焦点を当てています。
アーキテクチャパターンについては、次のようにコードをスタイリングする具体的な方法を考えます gof お気に入り;アダプター、戦略、ビルダー、メディエーターなど
アーキテクチャスタイルのために、全体的なシステムを考えてください。 IE、プレゼンテーションにMVCを使用し、DDDを使用してビジネスレイヤーをモデル化し、WCF(.NETに夢中になっている場合)、InteroPの場合はSOAなどです。
アーキテクチャのデザインパターンは、より一般的であり、幅広いアプリケーションではより一般的で使用可能なアーキテクチャスタイルがよりドメイン固有です。このため、このアーキテクチャパターンには、より多くのドメインの知識が必要です。
アーキテクチャパターン - 要素タイプの一般的なセットとその相互作用を定義します。アーキテクチャパターンの例には、パイプとフィルター、モデル - ビュー - コントローラー、および反射が含まれます。
建築スタイル - この用語は、ガーランとショーによって造られました。これは、システム組織の慣用的なパターンです。たとえば、クライアントとサーバーシステムはアーキテクチャスタイルです。
PS:元の建築スタイルの多くは、パターンとして再定式化されています。
アーキテクチャパターン: コンテキスト +問題 - >ソリューション
アーキテクチャスタイル: アーキテクチャパターンのソリューション部分
したがって、アーキテクチャスタイルは、アーキテクチャパターンのソリューション部分に類似しています。コンテキストと問題がどのように生じたかではなく、ソリューションに焦点を当てているアーキテクチャのドキュメントを扱う本でよく使用されています。
アーキテクチャスタイルは、多くのコンポーネントのシステムを説明しています。アプリケーションアーキテクチャは1つだけで、マイクロサービス、SOA、イベント駆動型アーキテクチャなどの1つのアーキテクチャスタイルをどこにでも適用する必要があります。
アーキテクチャパターンは、単一のコンポーネント内の何かを説明し、どこでもCQRやDDDなどの同じアーキテクチャパターンを適用しようとしません。
アーキテクチャスタイルは、非常に広いストロークで、コードを整理する方法を教えてくれます。これは最高レベルの粒度であり、レイヤー、アプリケーションの高レベルのモジュール、およびそれらのモジュールとレイヤーが互いにどのように相互作用するか、それらの間の関係を指定します。建築スタイルの例:コンポーネントベース、SOA
アーキテクチャパターンは、コードベースに大きな影響を与え、ほとんどの場合、アプリケーション全体に水平方向に影響を与えます(つまり、レイヤー内のコードを構築する方法)または垂直方向に(つまり、外側の層から内側の層へのリクエストの処理方法戻る)。アーキテクチャパターンの例:Model-View-Controller、Model-View-ViewModel
建築スタイル
アーキテクチャスタイルは、アプリケーションサブシステムのより広範な組織を表し、ITの全体的な概要のアイデアを描写する名前です。例は、 SOA
, Client/Server
, Message Bus
等
建築パターン
建築パターンは、一般的な建築上の問題に対する再利用可能な解決策の名前であり、内側の部分がそれらを解決するためにどのように実装されているかを考えています。例は、 2-Tier
, 3-Tier
, N-Tier
, MVC
, REST
等
1つのスタイルは、複数のパターンを使用して複数の問題を解決できます。たとえば、a クライアント/サーバースタイル を使用できます N層パターン または(および)an MVCパターン それを分離するため ビジネスの論理, プレゼンテーションロジック と データロジック 解決するモジュール性を導入するため modifiability
と maintainability
問題。