2009-06-10 20 views
0

隨着CMS(PHP/MySQL)越來越大,代碼越來越難以維護,我正在考慮應用MVC模型以使其更易維護,透明。我一直在做這方面的工作,我認爲除了意見部分之外,我已經弄清楚了。下面是我的想法至今:MVC模型中應用於CMS時的V部分

index => controllers <=> models 
     controllers => views 

充當主控制器(路由器),並創建基於網址參數控制器類的實例的index.php文件。控制器類與模型類交談以更新和從數據庫檢索信息。之後,控制器確保顯示視圖(以模板的形式)並接收處理後的數據以進行顯示。然而...

這個想法是將視圖中的所有邏輯轉移到控制器,對吧?或者至少遠離視圖 - 防止胖/瘦的控制器/模型討論。但無論我以何種方式來看,我仍然需要一些動態視圖,這也需要一些邏輯。例如,根據某些用戶的用戶級別和權限(更新,更新/刪除等)顯示某些選項。所以這將歸結爲if/else語句和類似的東西。這個可以嗎?如果是這樣,這個「簡單」邏輯有多少是「允許的」?我認爲不同的模板開始變得更有意義(例如profile_viewprofile_edit)。

另一個簡單的例子。假設一個用戶可以看到10個配置文件字段中的5個,而另一個用戶10/10。我應該通過控制器檢索所有10個字段的所有信息,並在視圖中確定是否顯示它?或者將這些決策移至控制器,並檢索5或10個字段的信息,並根據已傳遞的信息僅顯示視圖中的可用字段?因爲在許多情況下,擁有所有數據並忽略其中的一部分會容易得多,反而不知道有什麼可用的並且必須一直檢查。

回答

1

「所以這將歸結爲if/else語句和類似的事情,這是行嗎?

是的。

「這個」簡單「邏輯有多少是」允許的「?

簡單的if-else和簡單循環必須存在於視圖模板中。

沒有計算。沒有表單處理邏輯。都不是。

如果你看一些更復雜的框架,你可以看到一些例子。事實上,你應該使用一個框架,而不是自己動手。

[如果您有耐心閱讀基於Python的Django template文檔,您可以看到應該允許的內容。有可能有類似理念的一些PHP框架。]

「說一個用戶可以看到5出的10個人資料字段,而另一個用戶10/10」

有幾種方法。

  1. 兩個不同的頁面模板表示相同的底層數據。您獲取所有內容, ,但選擇適合用戶的模板。

  2. 一個顯示變體基礎數據的複雜模板。您可以獲取所有內容,提供合適的標誌,併發送到使用模板方面的if語句的模板。

哪個更好?取決於你對複雜頁面的胃口。就個人而言,我寧願有兩個簡單的頁面,並使用某種繼承來分解常見功能。我不喜歡if語句,它們是導致問題的原因。 OTOH,一些人如if語句,並不介意複雜性。

0

第二個示例:不要將所有10個字段僅傳遞給可見的字段,過濾控制器中的不可見元素,並儘可能簡化視圖。

1

在我的理解和MVC的應用程序,該控制器包含業務/應用邏輯但視圖可以包含表象邏輯。您希望您的視圖儘可能簡單明確,但您不希望在控制器中生成HTML(例如)並在視圖中顯示該視圖。