この資料は「エンタープライズ開発入門」シリーズの一部です。以前の記事:
この記事では、MVC と呼ばれるものについて学びます。MVC とは何かについて説明し、その歴史に触れ、MVC で具体化される基本的なアイデアと概念を探り、アプリケーションをモデル、ビュー、コントローラー モジュールに分割する方法を段階的に見ていき、 Spring Boot を使用した小規模な Web アプリケーションを確認し、例として Spring MVC を使用して、データが Java コードから HTML ページにどのように送信されるかを確認します。このマテリアルを理解するには、デザイン パターン、特にオブザーバーとファサードに精通している必要があります。また、HTTP リクエストとレスポンスに精通し、HTML の基本を理解し、Java アノテーションとは何かを理解してください。コーヒーとスナックを飲みながら、快適にお過ごしください。さぁ、始めよう。
これらすべてから、論理的な結論を導き出すことができます。複雑なシステムはモジュールに分割する必要があります。この分離を達成するための手順を簡単に説明しましょう。
こうして、モデル、ビュー、コントローラーと呼ばれる 3 つのモジュールで構成されるアプリケーションに到達します。要約しましょう:
- ネットワーキングについて
- ソフトウェアアーキテクチャについて
- HTTP/HTTPSについて
- Maven の基本について
- サーブレットについて (簡単な Web アプリケーションの作成)
- サーブレットコンテナについて

MVCの歴史
MVC の背後にあるアイデアは、1970 年代後半に Xerox PARC で働いていた Trygve Reenskaug によって策定されました。当時、コンピュータを扱うには学位が必要であり、膨大な文書を継続的に研究する必要がありました。Reenskaug が非常に強力な開発者のグループと協力して解決した課題は、一般ユーザーのコンピューターとの対話を簡素化することでした。非常にシンプルで理解しやすい一方で、コンピューターや複雑なアプリケーションの制御を可能にするツールを作成する必要がありました。リースカウグは、アラン・ケイの指導の下、「あらゆる年齢の子供向け」ラップトップ・コンピューター、ダイナブックとスモールトーク言語を開発するチームに取り組みました。このとき、フレンドリーなインターフェイスの概念が定められました。多くの点で、Reenskaug と彼のチームが行った研究は、IT 分野の進化に影響を与えました。MVC には直接当てはまりませんが、これらの開発の重要性を示す興味深い事実を次に示します。アラン・ケイ言った「私が初めて Apple 社に来たとき、それは 84 年でした。Mac はすでに世に出ていましたが、ニューズウィーク誌から連絡があり、Mac についてどう思うか尋ねられました。私はこう言いました。『そうですね、Mac は、批判されるだろう』それで、2007 年に iPhone を発表した後、彼はそれを私のところに持ってきて手渡し、「アラン、これは批判されるほど良いことですか?」と言いました。そして私は言いました、「スティーブ、これをタブレットと同じくらいの大きさにすれば、あなたは世界を支配できるでしょう。」 3 年後の 2010 年 1 月 27 日、Apple は対角 9.7 インチの iPad を発表しました。言い換えれば、スティーブ・ジョブズはアラン・ケイのアドバイスをほぼ正確に従ったということになる。リースカウグのプロジェクトは 10 年間続きました。しかし、MVC に関する最初の出版物はさらに 10 年後に世に出ました。Martin Fowler 氏、ソフトウェア アーキテクチャに関するいくつかの書籍や記事の著者、彼は、Smalltalk の実用バージョンを使用して MVC を研究したと述べています。長い間、オリジナルの情報源から MVC に関する情報がなかったため、また他のいくつかの理由により、この概念については多数の異なる解釈が現れました。その結果、多くの人が MVC をデザイン パターンであると考えています。あまり一般的ではありませんが、MVC は複合パターン、または連携して複雑なアプリケーションを作成する複数のパターンの組み合わせと呼ばれます。しかし、前述したように、MVC は実際には主に、異なるパターンを使用してさまざまな方法で実装できる一連のアーキテクチャ上のアイデア/原則/アプローチです。次に、MVC の概念に組み込まれている主なアイデアについて検討します。そして他のいくつかの理由から、この概念については多数の異なる解釈が現れました。その結果、多くの人が MVC をデザイン パターンであると考えています。あまり一般的ではありませんが、MVC は複合パターン、または連携して複雑なアプリケーションを作成する複数のパターンの組み合わせと呼ばれます。しかし、前述したように、MVC は実際には主に、異なるパターンを使用してさまざまな方法で実装できる一連のアーキテクチャ上のアイデア/原則/アプローチです。次に、MVC の概念に組み込まれている主なアイデアについて検討します。そして他のいくつかの理由から、この概念については多数の異なる解釈が現れました。その結果、多くの人が MVC をデザイン パターンであると考えています。あまり一般的ではありませんが、MVC は複合パターン、または連携して複雑なアプリケーションを作成する複数のパターンの組み合わせと呼ばれます。しかし、前述したように、MVC は実際には主に、異なるパターンを使用してさまざまな方法で実装できる一連のアーキテクチャ上のアイデア/原則/アプローチです。次に、MVC の概念に組み込まれている主なアイデアについて検討します。MVC: 基本的な考え方と原則
- VC は、ユーザー インターフェイスを備えた複雑な情報システムを構築するための一連のアーキテクチャ上のアイデアと原則です
- MVC は、Model-View-Controller の略語です。

ステップ 1. アプリケーションのビジネス ロジックをユーザー インターフェイスから分離する
MVC の主な考え方は、ユーザー インターフェイスを持つアプリケーションは 2 つのモジュールに分割できるということです。ビジネス ロジックの実装を担当するモジュールとユーザー インターフェイスです。最初のモジュールはアプリケーションの主な機能を実装します。このモジュールはシステムの中核であり、アプリケーションのドメイン モデルが実装されます。MVC パラダイムでは、このモジュールは文字 M、つまりモデルです。2 番目のモジュールは、ユーザーにデータを表示し、ユーザーとアプリケーションの対話を処理するロジックを含む、ユーザー インターフェイス全体を実装します。この分離の主な目的は、システムのコア (MVC 用語では「モデル」) を独立して開発およびテストできるようにすることです。この分離を行った後のアプリケーションのアーキテクチャは次のようになります。
ステップ 2 オブザーバー パターンを使用してモデルの独立性をさらに高め、ユーザー インターフェイスを同期します
ここには 2 つの目標があります。- モデルのさらなる独立性を実現
- ユーザーインターフェースを同期する
ステップ 3 インターフェイスをビューとコントローラーに分離する
引き続きアプリケーションをモジュールに分割しますが、今度は階層の下位レベルになります。このステップでは、ユーザー インターフェイス (ステップ 1 で個別のモジュールに分割した) がビューとコントローラーに分割されます。ビューとコントローラーの間に厳密な線を引くのは困難です。ビューはユーザーが見るものであり、コントローラーはユーザーがシステムと対話できるようにするメカニズムであると言うと、矛盾を指摘されるかもしれません。Web ページ上のボタンや電話画面上の仮想キーボードなどのコントロール要素は、基本的にコントローラーの一部です。ただし、これらはビューの他の部分と同じようにユーザーに表示されます。ここで本当に話しているのは、機能の分離です。ユーザー インターフェイスの主な役割は、ユーザーとシステムの対話を容易にすることです。- システム情報を出力し、ユーザーに便利に表示します
- ユーザーデータとコマンドを入力します(それらをシステムに伝達します)。

- MVC パラダイムの原則によれば、システムはモジュールに分割する必要があります。
- 最も重要で独立したモジュールはモデルである必要があります。
- モデルはシステムの中核です。ユーザー インターフェイスから独立して開発およびテストできる必要があります。
- これを達成するには、分割の最初のステップで、システムをモデルとユーザー インターフェイスに分割する必要があります。
- 次に、オブザーバー パターンを使用して、モデルの独立性を強化し、ユーザー インターフェイスを同期します。
- 3 番目のステップは、ユーザー インターフェイスをコントローラーとビューに分割することです。
- ユーザー データをシステムに受信するために必要なものはすべてコントローラーにあります。
- ユーザーに情報を配信するために必要なものはすべてビュー内にあります。
ビューとコントローラーがモデルとどのように対話するかについて少し説明します。
ユーザーはコントローラーから情報を入力することで機種変更を行います。少なくとも、ユーザーはモデル データを変更します。ユーザーがインターフェイス要素を通じて (ビュー経由で) 情報を受け取るとき、ユーザーはモデルに関する情報を受け取っていることになります。これはどうして起こるのでしょうか? ビューとコントローラーはどのような手段でモデルと対話しますか? 結局のところ、ビューのクラスはモデルのクラスのメソッドを直接呼び出してデータを読み書きすることはできません。そうでなければ、モデルが独立しているとは言えません。モデルは、ビューもコントローラーもアクセスすべきではない、密接に関連したクラスのセットです。モデルをビューとコントローラーに接続するには、ファサード デザイン パターンを実装する必要があります。モデルのファサードは、モデルとユーザー インターフェイスの間の層です。これを通じて、ビューは適切にフォーマットされたデータを受け取り、コントローラーはファサードで必要なメソッドを呼び出してデータを変更します。最終的に、すべては次のようになります。
GO TO FULL VERSION