模型-視圖-控制器 (MVC)
===========================

Yii 使用了 Web 開發中大量採用的模型-視圖-控制器（MVC）設計模式。
MVC 的目標是將商業邏輯從用戶界面的中分離，這樣開發者就可以更容易地改變每一部分而不會影響其他。
在 MVC中，模型代表訊息（資料）和商業規則；視圖包含了用戶界面元素，例如文字，表單等；
控制器則管理模型和視圖中的溝通。

除了 MVC, Yii 還導入了一個前端控制器，叫做`應用程式`，它封裝了請求處理的執行上下文。
應用程式處理用戶的請求並將其分派到一個合適的控制器以繼續處理。

下面的示意圖展示了 Yii 應用程式的靜態結構：

![Yii 應用程式的靜態結構](structure.png)


一個典型的工作流程
------------------
下圖展示了一個 Yii 應用程式在處理用戶請求時典型的工作流。

![一個典型的 Yii 應用程式工作流程](flow.png)

   1. 用戶發出了存取 URL `http://www.example.com/index.php?r=post/show&id=1` 的請求，
Web 伺服器器通過執行入口腳本 `index.php` 處理此請求。
   2. 入口腳本建立了一個 [應用程式](/doc/guide/basics.application) 實體並執行。
   3. 應用程式從一個叫做 `request` 的 [應用程式元件](/doc/guide/basics.application#application-component)
中獲得了用戶請求的詳細訊息。
   4. 應用程式在一個叫做 `urlManager` 的應用程式元件的幫助下，決定請求的 [控制器](/doc/guide/basics.controller)
和 [動作](/doc/guide/basics.controller#action) 。在這個例子中，控制器是 `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#widget)。
   10. 視圖的呈現結果被插入一個 [佈局](/doc/guide/basics.view#layout)。
   11. 動作完成視圖呈現並將其呈現給用戶。


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