モデル-ビュー-コントローラ (MVC)
===========================

Yii はウェブプログラミングで幅広く採用されている、モデル-ビュー-コントローラ (MVC) デザインパターンを実装しています。
MVC はユーザインタフェースの考慮からビジネスロジックを分離することを目的としています。
そうすることによって、開発者は、他方に影響を与えることなく、一方を容易に変更することが出来ます。
MVC においては、モデル (M) は情報 (データ) とビジネスルールを表現し、ビュー (V) はフォームやテキストのようなユーザインタフェースを含み、コントローラ (C) はモデルとビューの通信を管理します。

MVC を実装する他に、Yii は `アプリケーション` と呼ばれるフロントコントローラも導入しています。
これは、リクエスト処理のための実行コンテキストをカプセル化したものです。
アプリケーションは、ユーザリクエストに関するいくつかの情報を収集して、
さらに処理を進めるために適切なコントローラにリクエストを渡します。

以下の図は Yii アプリケーションの静的な構造を示します。

![Yii アプリケーションの静的な構造](structure.png)

典型的なワークフロー
------------------
以下の図は Yii アプリケーションがユーザリクエストを処理する時の典型的なワークフローを示します。

![Yii アプリケーションの典型的なワークフロー](flow.png)

   1. ユーザが URL `http://www.example.com/index.php?r=post/show&id=1` によってリクエストを発行します。
ウェブサーバはブートストラップスクリプト `index.php` を実行してリクエストを処理します。
   2. ブートストラップスクリプトは [アプリケーション](/doc/guide/basics.application) インスタンスを生成し、それを実行します。
   3. アプリケーションは詳細なユーザリクエスト情報を `request` という名前の [アプリケーションコンポーネント](/doc/guide/basics.application#sec-4) から得ます。
   4. アプリケーションは、`urlManager` という名前のアプリケーションコンポーネントの助けによって
要求されている [コントローラ](/doc/guide/basics.controller) と [アクション](/doc/guide/basics.controller#sec-4) を決定します。
この例においては、コントローラは `post` で、`PostController` クラスを示します。
そして、アクションは `show` ですが、その実際の意味はコントローラによって決定されます。
   5. アプリケーションはユーザリクエストをさらに処理するために要求されたコントローラのインスタンスを生成します。
コントローラはアクション `show` がコントローラクラスの `actionShow` メソッドであると決定します。
そして、アクションに関連付けられたフィルタ (例えばアクセス制御やベンチマーク) を生成して、実行します。
アクションはフィルタによって許可された場合に限り実行されます。
   6. アクションは ID が `1` である `Post` [モデル](/doc/guide/basics.model) をデータベースから読み出します。
   7. アクションは `Post` モデルを用いて `show` という名前の [ビュー](/doc/guide/basics.view) を表示します。
   8. ビューは `Post` モデルの属性(アトリビュート)を読み出して表示します。
   9. ビューはいくつかの [ウィジェット](/doc/guide/basics.view#sec-3) を実行します。
   10. ビューが描画した結果は [レイアウト](/doc/guide/basics.view#sec-2) に埋め込まれます。
   11. アクションはビューの描画を完了させ、結果をユーザに表示します。


<div class="revision">$Id$</div>
