2012-07-18 21 views
4

我正在使用MVC框架(特別是PHP的CodeIgniter)。我試圖儘可能遵循「最佳實踐」,但我對MVC沒有太多經驗。我從Controller的會話中檢索數據是不好的做法嗎?如果某個特定的會話值是'foo'或'bar',或者我應該直接在控制器內部執行操作,我應該「詢問」模型嗎?我想我應該在模型裏面做,因爲會話數據在技術上是數據,但我只是想確認一下。清楚的是,我不會將會話數據存儲在數據庫中,所以我沒有運行查詢。您是否應該在MVC框架的控制器或模型中處理會話數據?

回答

3

模型通常處理所有持久化到某種長期存儲的域對象。他們可能會或可能不會具有與特定應用程序使用它們有關的瞬態值。

控制器應該查詢他們需要的任何數據,以正確路由和顯示信息。它可能有助於創建一個直接在域對象(您的模型)上運行的「服務」層,並提供一個供控制器使用的API。不包含在控制器中的主要是業務邏輯。

例如,控制器抓取引用頁面並針對用戶流執行與該數據有關的操作是合理的。但是,除了驗證之外,它可能不應該檢查在賬戶之間轉移的金額 - 它應該將它傳遞給實例化並與正確的域對象一起工作的服務對象。

問題想請教一下你把到控制器的邏輯:

  • 這是否邏輯幫助弄清楚什麼模型對象,我需要?如果不是,它不應該在這裏。
  • 此邏輯是否有助於確定View對象將用於構造對用戶的響應?如果不是,它不應該在這裏。
+0

Nathaniel,所以如果我從數據庫中選擇要顯示在頁面上的東西,應該從控制器內完成?無關,但有幫助。 – 2012-07-18 21:53:22

+0

否;任何持久化到任何類型的存儲(包括數據庫)的對象都是域對象。如果您將某些內容存儲到數據庫中,那麼模型/服務層應該獲取該信息。控制器只是將這些信息傳遞給正確的視圖。 – 2012-07-18 21:55:39

+0

+1爲「某種長期存儲」。這就是我想說的。 Session是CodeIgniter(CI_Session)中的一個庫,您可以直接從類實例訪問會話數據。 – 2012-07-18 21:59:20

相關問題