最佳 MVC 實務

雖然大多數的網站開發工程師都已知道 模型-視圖-控制器 (MVC),但對於如何正確地使用 MVC 還是摸不著頭緒。MVC 背後的主要想法是 程式碼的重用和關注點分離。在這個章節中,我們將介紹一些常見的準則來如何在開發 Yii 應用程式時,也能遵循 MVC 模式。

在介紹這些準則,我們假設一個 Web 應用程式包含了許多子應用程式。例如:

子應用程式可以是用 模組 的方式實作,或是一個完整的 Yii 應用程式但與其他子應用程式共享程式碼。

模型

模型 代表與 Web 應用程式相關的資料結構,並且常常會在不同的子應用程式之間共享。例如,一個 LoginForm 模型可能會被前端和後端同時使用;一個 News 模型可能會被控制台命令、Web 應用程式介面和前/後端應用程式使用。因此,模型

有時候,遵循上述第三條規則可能會使得模型變得肥大,因為包含太多的程式碼。甚至,如果它有許多不同的功用,會造成這個模型更難維護。例如,一個 News 模型可能會有一個方法叫做 getLatestNews 只給前端使用;它也可能包含一個方法叫做 getDeletedNews 只給後端使用。對於一個中、小型的應用來說,或許這樣不錯。但是對於大型的應用程式,下面要介紹的策略或許比較適合:

所以,拿上述的所舉的例子來說,前端的 News 模型就會有一個 getLastestNews 的方法,而後端的的 News 則是會有一個 getDeletedNews 方法。

大致上來說,模型不應該包含處理終端使用者的邏輯。更詳細的說,模型

視圖

視圖 必須根據使用者所要求的格式來顯示模型。大致上,視圖

視圖可以以不同的方式被重用:

控制器

控制器 是用來銜接模型、視圖和其他元件在一起成為一個可以運行的應用程式。控制器必須直接面對處理使用者的需求。因此,控制器

在一個設計良好的 MVC 應用程式裡,控制器通常會非常的瘦小,可能只會包含些許的程式碼;而模型會非常的肥大,將包含那些必須用來展現或是操作的資料。這是因為一個模型的資料結構和邏輯通常屬於特定的應用領域,需要大量的客製化來達成需求;反觀控制器的邏輯則是遵循一種非常相似的模式,橫跨在不同的應用程式之間,進而可以藉由框架或是基礎類別來簡化。

$Id$