サーバーにMVCがありません

画像 MVCは現在、レイジーのみを使用していません。 はい、そして怠laでも、このアプローチを実装するCMSを使用します。

しかし、それはMVCですか?



グラフィカルユーザーインターフェイス(GUI)を使用してプログラムを開発するときに、MVCと呼ばれるアーキテクチャがXerox PARC研究所に登場しました。 GUIプログラムが同じ場所に登場し、登場してすぐに、プログラミングの世界に新しい問題が明らかになったことは注目に値します。 実際、GUIはコマンドラインインターフェイスとは対照的に、多くの異なる情報を表示し、個々の部分を接続できます。最も重要なことは、この情報と対話できることです。



ユーザーがデータを操作すると、ユーザーは変化する可能性があります。つまり、ユーザーに関連付けられたデータが変化する可能性があります。 たとえば、テキストボックスとウィンドウタイトルに同じ行が表示されます。 行を書き換えます-タイトルを変更する必要があります。 「額」の解決策:テキストフィールドの行が変更されたことを理解したら、ヘッダーの行を変更します。 しかし、同じデータが5つの異なる場所に表示されている場合(データには5つの表現がある)、それぞれを変更できますか? 次に、データが表示される4つの他のビューを更新するデータ変更イベントの各ハンドラーにコードを記述する必要があります。 少なくとも1つのビューで何かが変更された場合、すべてのハンドラーが編集する必要があります。 コードが接続されすぎています。



この問題を解決するために、MVCアーキテクチャが発明されました。



ソリューションの本質:

データを変更するときにビューを変更するコードからはエスケープできません。 彼はそうでなければなりません。 しかし、1つのコピーで。 したがって、関数に割り当てる必要があります。 そして、すべてのハンドラーからこの関数を呼び出します。 しかし、ちょっと待ってください。 「データが変更されたとき」という言葉は、どのイベントが発生したかが問題ではないことを明確に示しています。 これは、データを変更するイベントで呼び出される関数にビューを更新するための関数を呼び出すこともできることを意味します。 その結果、コード自体がビューを更新し、同じデータの新しいビューを追加するには、データ変更関数に関数呼び出しを追加するだけで十分です。



プログラマ。 具体的には、Xerox PARCの研究者はOOPが大好きでした。 そして、それは彼らが私が「コントロールリフト」と呼んでいるもの、つまり制御フローの上流で何らかのコードを呼び出すという決定の転送を愛していたことを意味します。 これは主にオブジェクトを渡すことで行われ、オブジェクトはメソッドと呼ばれます。 関数で条件を作成する代わりに、関数を呼び出す前に条件を作成し、それに応じて1つまたは別のオブジェクトを作成し、結果のオブジェクトを引数として渡すことで関数を呼び出すことができます。 それは何を与えますか? そして、異なるオブジェクトを渡すことで関数の動作を変更できるという事実。 関数自体は変更されません。



データが変更されたときに実行される関数についても同じことができます。 彼女にオブジェクトのメソッドを呼び出させてください。 その後、関数に触れることなく表現を追加することが可能になります。 多くの表現があるため、オブジェクトを配列に保存する必要があります。



これは、古典的なMV *アーキテクチャです。 コントローラーに関しては、まだ議論の余地がありますが、すべての場合において、データを変更すると、これらのビューにデータ、ビュー、および変更があります



結論:MVCは、何らかのアーキテクチャを使用してモデルとビューを分離できるようにすることで、強力なコード接続の問題を解決します。



GoogleまたはYandexのハブで検索する場合、ほとんどの情報はWebアプリケーションのMVCに関するものです。 そして、データとビューを共有するとき、これはMVCであると言っています。 このような定義は、システムを個別のパーツに階層化することを可能にする事実上すべてのデザインパターンの使用がMVCであると想定するのに十分です。



UPD:ここでいうWebアプリケーションとは、そのようなアプリケーションを意味し、そのすべての仮想MVCはサーバーに焦点を当てています。 たとえば、PHP5のこのような単純なMVCシステムは次のとおりです。



しかし、ちょっと待ってください。 いずれにせよ、OOPを適切に使用すると、システムが疎結合された部分に分割されます。

Webアプリケーションにはイベントはまったくありません。 HTTPプロトコルでは、リクエストに応答した後にアプリケーションを強制終了するか、強制終了したふりをする必要があります。 したがって、Webアプリケーションの唯一のイベントは、パラメーターのセットを使用した起動です。



また、イベントがない場合、プレゼンテーションを更新する必要はありません。 それらは作成時にすでにレンダリングされています。



Webアプリケーションでは、コードをビジネスロジック、テンプレート、コントローラーに分けるのが便利ですが、わずかに異なるプログラミング領域で使用されるものではなく、名前で呼び出す必要がありますか?



UPD: jigpuzzledは、サーバーアーキテクチャに類似した別の名前が既に存在することを指摘しました: Action-Domain-Responder



All Articles