この 2 つの用語は非常に広範に使用されています。それらはどのように正確に異なりますか?
この違いを詳しく説明できる実際の例やシナリオはありますか?
プログラムまたはコンピューティング システムのソフトウェア アーキテクチャは、ソフトウェア コンポーネント、それらのコンポーネントの外部から見えるプロパティ、およびそれらの間の関係で構成されるシステムの構造です。[...] ソフトウェア アーキテクチャを文書化することで、利害関係者間のコミュニケーションが促進され、高レベルの設計に関する初期の決定が文書化され、プロジェクト間での設計コンポーネントとパターンの再利用が可能になります。
--
ソフトウェア設計は、問題を解決し、ソフトウェア ソリューションを計画するプロセスです。ソフトウェアの目的と仕様が決定された後、ソフトウェア開発者はソリューションの計画を作成するために設計するか、設計者を雇用します。低レベルのコンポーネントとアルゴリズムの実装の問題、およびアーキテクチャ ビューが含まれます。
--
したがって、それらは互いに部分を共有していますが、ソフトウェアのわずかに異なる側面を参照しています。技術的に言えば、アーキテクチャはすべての側面を含むべきですが、実際には通常、ソフトウェアの高レベルのトポロジまたは構造を指します。たとえば、システムをファイルベースのコマンド ライン ソフトウェア、Web アプリ、またはn 層のリッチ インターネット アプリケーションとして実装するかどうかの決定は、アーキテクチャ上の決定になります。
address1
ソフトウェアの設計にはアーキテクチャに関する決定が含まれますが、データベースに何文字入れる必要があるかなど、より深い決定が含まれます。これは、実際にはアーキテクチャに関する決定ではありません。
編集:違いを簡単にするために、アーキテクチャはソフトウェアソリューションの既知のパターンを指し、多くの場合、サブコンポーネント/層/層の間の配置と関係を伴います。パターンは、データを保存、処理、および表示する方法と場所も指定します。アーキテクチャとは、自律型ロボット パラダイムなど、ボックスと矢印を使用して記述できるものです。
ソフトウェア設計は、与えられたソフトウェア要件に対するソリューションを考えるプロセスです。それぞれの問題は独自の方法で固有であるため、設計は異なります。
私の理解では、設計は 1 つのシステムに固有のものです。2 つのシステムの設計が似ていても、同じアーキテクチャを共有している可能性があります。
したがって、設計は、選択したアーキテクチャを特定の要件に適用する方法を定義します。(またはこのようなもの)
しかし、これは私の感覚なので、他の答えに興味があります...
このように考えてみてください。家を建てるために、建築家 (アーキテクト) から設計図をもらいます。次に、建設業者はこの設計図を使用して、何本の柱が必要か、どの種類のセメントとレンガを使用するか、どの種類の着色を行う必要があるかなどを決定します (設計者)。これらは設計上の決定です。その後、ワーカーはビルダーから注文を受け、家を建てます (コーダー)。
これに対する私の見解..
設計とは、ソフトウェアをどのように構築するかを計画するプロセスです
アーキテクチャは、コードベースがどのように構造化されているかという現実です。コードが構造化されていない場合、アーキテクチャがあると主張することはできません。
理想的には、設計段階 (またはコードベースの存続期間中の一連の設計期間) からアーキテクチャを取得することをお勧めしますが、優れたアーキテクチャは、リファクタリングによる継続的な漸進的な改善と、単に「正しい」ことを行うという感覚から生まれる場合があります。
ただし、これらは正式に定義された単語ではありません;)
アーキテクチャが設計されています。しかし、その逆ではありません。「アーキテクチャ」は通常、大規模な (多層) システムの設計を識別して名前を付けるために使用されます。システムは、定義上、複数のコンポーネントまたはサブシステムのコラボレーションです。それを「システム設計」または単に「設計」と呼ぶこともできますが、アーキテクチャは、何らかの理由で、そのサブシステムまたはコンポーネントの設計とは異なるように要求するため、より単純な重みを与えます。
デザインとは、それをどのように行うかを計画することです。アーキテクトは、あなたが実装した方法です。1. 段階、責任範囲、および意思決定のレベルに関して 2. アーキテクチャは、フレームワーク、ツール、言語、範囲、目標、および高レベルの方法論の観点から見た全体像であり、設計は実装方法論のより小さな全体像です。システムのさまざまな部分がどのように見えるか、デザインパターン、プログラミングイディオム、リファクタリング、およびコードの編成方法に関するローカルな制約があります。3.アーキテクチャは、より高いレベルにある戦略、構造、および目的に向かいます。デザインは戦術的であり、実装と実践に向けられており、より具体的なものに向けられています。