2012-11-05 29 views
14

我對設計模式比較陌生,但我覺得我對MVC模式以及代碼分離帶來的好處有了很好的理解。爲什麼要將MVC中的視圖分解爲視圖類和模板

不過,兩次我已經看到了行動(Magento的和Joomla!)MVC模式,有進一步專業化,與視圖同時包含一個視圖類(Magento的塊)和一個PHP模板文件。如果有人能夠解釋這一分裂的好處,我將不勝感激。

我也不知道如何在視圖類和模板文件之間分割我的代碼。有時候我發現自己正在寫一些看起來是冗餘視圖類的東西(在Joomla!中),它只是簡單地訪問模型,然後只是爲模板提供數據。哪些代碼應該出現在模板中,哪些代碼應該出現在視圖類中?

回答

2

在一般情況下,'視圖'和'模板'之間的分割是這樣的,如果你打算通過不同的方法呈現視圖數據[即。 HTML,XML,JSON等],那麼您不需要重寫'View'類,只需創建新的'Template'類。如果您想將AJAX調用併入您的前端,或者從其他應用程序(例如智能手機應用程序)撥打電話,此功能非常有用。

3

您可以將view設置爲what,將模板設置爲how

視圖通過使用模型來準備數據,並使該數據可用於模板。

反過來,模板通常在視圖的範圍內被調用(至少在Joomla!中)。

這似乎是在第一類的冗餘,但使用模板時,將覆蓋這種方法的力量顯現出來。然後,視圖可以單獨存在,並且只有模板(或者這個問題的子模板)被覆蓋。

即使使用相同的主(Joomla!)模板,您也可以指定一個不同的視圖模板作爲參數,以防您需要演示文稿的一些專業化。這也消除了代碼重複

例如,假設您創建一個新的主模板。您可以覆蓋一些默認的視圖/模板,並保留其他一些不變的內容。然後,您可以創建一個新視圖,說:博客查看​​,也是2模板吧,光間隔黑暗密,在2個不同的場景下使用。這樣,您只有一個視圖來準備所有的what和幾個不同的模板來照顧how

+1

我認爲,MVC範式的全部內容是模型是**什麼**和視圖是**如何**。 – Dom

+0

我的編輯在五分鐘的規則中迷失了,上面的其他內容應該閱讀。據我所知,使用Joomala時!有三個領域可以控制如何呈現模型的內容,這些領域是:1)視圖2)模板和3)樣式表。您能否提供一個示例顯示演示文稿應該如何以及爲什麼在這些位置之間進行分區。 – Dom

+0

你可以找到一個關於內容重寫的解釋,這是這種分離最常見的用例[這裏](http://docs.joomla.org/Understanding_Output_Overrides)。即使您的默認安裝模板也有內置覆蓋。視圖被用作獲取數據並將其分配給變量的常見代碼片段,然後調用渲染部分,這是視圖的模板(在Joomla!中稱爲「佈局」)。可以在這裏找到一個簡短的解釋(http://docs.joomla.org/How_to_override_the_output_from_the_Joomla!_core)。 – MasterAM

0

閱讀本文http://www.codinghorror.com/blog/2008/05/understanding-model-view-controller.html。對我來說,MVC意味着向一個數組註冊一個函數並循環訪問該數組,並最終調用主程序中的一個函數。但是對於很多人來說,它似乎將模型(數據庫)與視圖(html模板)和控制器(主應用程序)分開。但那不是我認爲對於一個節目特別的東西。當你自然地開發Web應用程序時,你會擁有像數據庫,瀏覽器,後端和前端,html,css,圖像文件,視頻文件和php語言等所有後端。爲什麼這會變成複雜的詞語,混淆了開發?我認爲MVC一般來說是有用的。學習裝飾模式它更有用。

0

說實話...性能的最佳選擇是在後端創建Web服務並使用JavaScript庫與服務器交談。 joomla和其他cms發行版嘗試將這兩種設計模式抽象到MVC中,導致MVC和Web服務/客戶端代碼的混合。這種混合性質允許將擴展擴展到JavaScript風景,這似乎是網絡發展的方向。

+1

這與視圖和模板的分離有什麼關係? –

6

在MVC靈感的設計模式中,查看所有UI邏輯。他們應該從模型層請求信息,並根據他們收到的信息選擇應使用哪些模板創建響應。或者即使需要任何渲染(視圖也可以發送HTTP頭)。

你可以說,在經典的MVC和Model2 MVC模式中,視圖只能從模型層讀取,但控制器只能寫入它。

如果您收到來自模型層的一些錯誤狀態,認爲作爲主要佈局模板和補充它的模板,這是包含錯誤信息的HTML片段。然後它將整個事件集合到用戶(在Web應用程序中是瀏覽器的情況下)。

在您的基本Web應用程序中,模板只是簡單的文件,其中混合了標籤和php變量。

+1

視圖不應從模型請求數據。 Controller從Model請求數據,並使其(某些)可用於View。視圖的責任是使用控制器公開的數據來呈現模板 –

+7

是的,不要相信[只有MVC Gold Badge]的傢伙(http://stackoverflow.com/help/badges/3849/model-查看控制器)上SO – Fabor

+1

@MihaiRăducanu也許[這(稍微更新)後](http://stackoverflow.com/a/16596704/727208)將幫助你瞭解我的方法背後的原因。 –

相關問題