私がバックエンドAPIを構築していたとき、私はDjangoをDjango-rest-framework(DRF)と組み合わせて使用しました。
そして、私はそれのアーキテクチャについては考えていません。
そして、私が正しく理解していれば、DRFはある種のModel-ViewSet-Serializerパターンを提供します。
だから私の質問です:使用されているフレームワークに基づいてどのアーキテクチャがどのように見えるかを決定することは間違っていますか?
フレームワークの選択は、アプリケーションが持つアーキテクチャに強く影響します。アーキテクチャに関する決定の多くはすでにフレームワークによって行われているため、独自のアーキテクチャを課そうとすることは、現在に逆らって泳ぐようなものです。
しかし、これはフレームワークを選択する全体の要点のようなものです。アプリケーション全体を自分で設計および構築する必要がある場合、アプリケーションに適したアーキテクチャを開発するのは面倒です。
実際には、私が自分のフレームワークを作成しているのでない限り、アーキテクチャについてあまり考えたくありません。アーキテクチャは、それ自体が目的ではなく、アプリケーションのファブリックの一部にすぎないものである必要があります。このようなフレームワークを使用すれば、アーキテクチャの面倒な作業のすべてを行うことができます。つまり、実際の機能の開発により多くの時間を費やし、配管にかける時間を短縮できます。
この方法を使用する場合は、フレームワークの選択と、それぞれがアプリケーションの構築を支援する役割をどのように果たすかについて慎重に検討する必要があります。しかし、フレームワークを選択することは、それがアプリケーションを機能させるための「迅速で汚い」方法であるため、完全に有効な選択です。それはすべて、実際のニーズが何であるかに依存します。
タイトルからの質問への答えは、「ソフトウェアアーキテクチャ」の定義によって異なります。一般的な定義の1つは、後の時点で変更するのにコストがかかる設計決定です(少なくとも完全な書き換えなしではありません)。したがって、DRFのようなフレームワークを選択することは、アーキテクチャ上の決定です。
しかし、あなたの質問テキストから、あなたは「アーキテクチャ」についてはるかに狭い考えを持っていると思います。たとえば、プログラムが持つべき層、それらの層が持つべき責任、そしておそらく各層で利用可能なテクノロジーなどです。これは、システムのアーキテクチャの一部で、 Robert Harversの回答 が適用されます。ここで、それは特定のフレームワークに大きく依存し、独自のレイヤーを定義する際にどれだけの自由度を与え、どれだけ事前に定義するかを決定します。
このような事前定義されたレイヤーの決定に依存することが良いか悪いかは、主にevolvabilityの量に依存し、システムに必要になります。フレームワークのアーキテクチャの制限に簡単に達する可能性のある将来の要件が予想される場合、おそらく適切な選択ではありません。そのような要件がプログラムの存続期間中に到達する可能性が低いと思われる場合は、選択は問題ありません。
多くの場合、これはジレンマにつながります。「迅速にアプリケーションを開発する」ために「迅速なアプリケーション開発」フレームワークを選択します(最初に市場に出すまでの時間が何よりも重要であるため)。その後、新しい要件が表示され、フレームワークの制限のため、システムに簡単に統合できません。次に、初期バージョンを破棄し、制限の少ないフレームワークを選択することをお勧めします。フレームワークには、異なるプログラミング言語が含まれている場合と含まれていない場合があり、システムを最初から再実装します。ただし、このような状況にある場合は、あまり長く待たないようにしてください。そうしないと、書き換えにコストがかかりすぎ、初期のアーキテクチャに行き詰まってしまいます。