什麼時候應該製作新的模型或控制器?是否應該只有控制器與相應的視圖1對1,並且在控制器和模型中一樣?或者,讓控制器的功能與任何特定視圖無關是好的做法嗎?舉例來說,如果所有投票代碼都進入投票控制器,或者分散在具有投票意見的控制器中,則可以進行投票。似乎可能是一個表決控制器是最好的。codeigniter中的MVC設計PHP
回答
首先,你實際上不能在php中實現經典的MVC。您可以做的最好的是Model2 MVC。
- 模型 - 負責所有的業務邏輯。沒有關於的線索,其中數據存儲或實際來自。存儲和檢索是DataMappers或DAO的責任。模型本身應該從來沒有包含SQL。永遠。
- 控制器 - 將模型綁定到視圖並更改兩者的狀態。它不會從模型中檢索信息以將其發送到查看。
- 查看 - 負責所有表現邏輯。從模型中檢索信息並將其綁定到適當的模板。查看本身不是模板。
你可以有1:1
視圖之間的關係控制器或many:many
。這取決於你如何實現視圖本身。
例如,您的視圖可能需要一個單獨的對象來處理渲染。並提供不同類型的對象(這是多態性很重要的地方),你可以讓你的視圖呈現XML,HTML或JSON。
或者您可以通過更改模板來做同樣的事情。如果基本表示邏輯沒有改變,並且您爲每個表單提供了不同的模板,則類ListView
可以呈現文章列表以及用戶列表。
在投票的情況下,對於所有投票相關的操作似乎都有一個控制器,並且您可以通過切換輸出模板來獲得單個視圖。
關於視圖對象的好處和模板不一定是相同的東西。在一些框架中,視圖對象是通過加載相關模板來創建的,因此區分有點模糊。 –
我不同意你,這裏是更正確的MVC模型:http://symfony.com/doc/current/book/controller.html(他們確實實現了它,所以這是可能的)。 –
@OZ_,實際上symfony模型的鏈接是[this](http://symfony.com/doc/current/book/doctrine.html)..並且他們幾乎只談論ORM。在一些例子中,它甚至看起來像是他們在控制器中有SQL片段..當談到SF和編碼實踐時,我有點兒警惕=/ –
這種事情的一些是喜好和意見,沒有一個正確的方法。有些方法可能更靈活,但可能會以更復雜爲代價。
關於您的「投票」的例子,這可能取決於投票將如何在您的網站中使用。投票是否會出現在不同類型的網頁上?如果是這樣,某種組件是一個好方法;然後可以使用投票組件視圖在不同頁面中顯示其數據,投票組件控制器接受投票結果,然後可能重定向到其他位置(或通過Ajax請求接受投票)。
很多時候你會發現模型(和控制器)或多或少以1:1映射到數據庫中的表。所以如果我有一個表users
,我可能有一個相應的User
型號,和UserController
控制器。
記住控制器打算做什麼:響應請求,確定需要加載哪些模型,然後要求他們存儲,操作並返回數據,然後將數據傳輸到視圖中進行顯示。讓控制器不直接映射到模型是很好的。您可能有一個名爲DebugController
的控制器,該控制器響應請求http://examples.com/debug/
,並且不直接映射到Debug
模型和表,但收集有關係統和各種模型的信息(當然,有所有這些東西應該被封裝成Debug
模型,該模型依次加載其他模型並組裝控制器請求的數據。
至於視圖,您通常會有給定控制器的多個視圖;往往每動作一個視圖。所以UserController::indexAction()
有views/user/index.php
,UserController::editAction()
有views/user/edit.php
等
該方法可能是靈活的,這是真的。
模型 - 描述與數據庫直接通信的層,即所有SQL查詢。 您可以爲DB中的每個表創建模型,該模型將處理與該表連接的所有操作(選擇,插入,更新,刪除)。 您可以爲應用程序中的每個「邏輯實體」設置模型,以處理此實體的操作。就像你的例子「投票」一樣,你可以定義這個模塊的邏輯。 (檢查是否用戶已經投媒體鏈接,getVoteCount ...)
的Controler - 處理由模型執行功能(他們不應該在DB直接comunicate)並將處理後的數據傳遞給適當的查看請求。如果您需要在不同的頁面上以不同的方式呈現相同的數據,那麼控制器應決定發送數據的視圖。
查看 - 您需要查看您應用程序中每個頁面,窗體,模塊。你將如何組織觀點來進行個人實驗。
- 1. MVC PHP設計註冊表
- 2. 另一個PHP MVC設計
- 3. PHP MVC設計問題
- 4. php mvc學說設計
- 5. 在CodeIgniter中設計庫
- 6. Codeigniter Eccomerce Trasaction設計?
- 7. iOS中的MVC設計
- 8. 在CodeIgniter或PHP中設計自己的庫
- 9. PHP,瞭解MVC和Codeigniter
- 10. 在PHP中安排任務MVC Codeigniter
- 11. 。 (MVC設計)
- 12. ASP.NET MVC設計
- 13. Spring MVC中,設計問題
- 14. Codeigniter應用程序設計
- 15. Codeigniter設計不帶對象
- 16. PHP + CodeIgniter,沒有MVC的RestFul URL?
- 17. PHP中的單例設計
- 18. MVC - Codeigniter
- 19. MVC設計問題
- 20. MVC設計問題
- 21. MVC導航設計
- 22. MVC模型設計?
- 23. MVC設計混亂
- 24. MVC設計問題
- 25. MVC設計問題
- 26. Spring MVC 3設計
- 27. codeigniter中的麪包屑(MVC)
- 28. codeigniter中的mvc組件?
- 29. MVC設計模式 - 設計模型
- 30. 多窗口設計的mvc
[胖模型,瘦身控制器和MVC設計模式]的可能重複(http://stackoverflow.com/questions/467113/fat-models-skinny-controllers-and-the-mvc-design-pattern) – Gordon
可能重複[MVC在PHP中:脂肪模型或脂肪控制器](http://stackoverflow.com/questions/4568553/mvc-in-php-fat-model-or-fat-controller) – Gordon