2012-10-18 80 views
-1

我已經瞭解到,您應該將MVC-OOD中的控制器類設置爲用例,從上到下只有一種運行MVC類的方法。MVC,控制器 - 使用案例

可以在一個控制器中使用不同的方法來獲得更多的控制和更好的總覽嗎?

比方說,你想運行一個控制器,將顯示一個登錄表單(從視圖獲取HTML等)。如果用戶沒有登錄,相同的控制器也會顯示註銷按鈕。 這可以通過控制器中的單個方法完成,但使用兩種方法似乎更好。如果您想登錄表單,可以調用一種方法,如果您想註銷按鈕,可以調用一種方法。 (只是一個例子)

那麼,是什麼利弊說。每個控制器應該只包含一個「用例」方法,還是可以包含多個?

+0

視圖可以簡單地檢查用戶的模型的狀態,並決定來顯示或不註銷按鈕..這不是面向對象的,但也許你更通常尋找基於角色的訪問控制 – 2012-10-18 18:37:29

回答

1

其重要記得MVC,首先,它的面向對象的架構,其次,它應該用於分離關注兩件事情。

問題的分離與抽象有關,它幫助我們理解手邊的代碼部分。模型和視圖都是相關對象的集合/域。每個對象都是完整的並且與其域相關。

你會發現類型,如按鈕,圖片,文本輸入等你查看裏面的對象,你會發現業務相關的對象(用戶,帳號,個人資料等)在模型中。

模型中的對象集合不會做太多工作,它們需要邏輯來將對象連接在一起。 (或者乾脆委託簡單的單一對象的請求,以正確的對象)

控制器提供接口到模型中,幷包含相關的模型和模型對象之間的交互的業務邏輯。你將爲你的Model創建一個Controller,Controller將有多個方法與你的用例保持一致。

0

TL; DR - 你誤會了MVC設計模式,這樣做是錯誤的。

控制器不負責渲染接口,也不負責顯示邏輯。控制器不要顯示什麼。相反,每個控制器的方法處理不同用戶的請求。它從所述請求中提取數據並將其傳遞給模型層和關聯的視圖。

關於什麼和如何顯示的決定都在視圖的範圍內。視圖包含MVC模式中的表示邏輯。在Web應用程序的上下文中,視圖創建響應。他們可以從多個模板組成一個或僅發送一個HTTP頭。

控制器可以通過將請求發送到該視圖的一些特定值的信號相關聯的視圖,但大多數在視圖的決定是基於信息模型中的層由不同的服務請求的視圖。

控制器的方法基於用戶可以發送什麼類型的請求。例如,在身份驗證表單中,它可能是:GET /login和/或POST /login

+0

我知道它做什麼。控制器顯示窗體,從視圖等獲得它,這不是問題! – user1121487

+1

@ user1121487「答案」在最後一段。這篇文章的其餘部分是,你**不知道控制器應該做什麼。我不知道你從哪裏瞭解到MVC設計模式,但都是**錯誤**。 –

+0

您可以以多種方式執行MVC。我學習它的方式來自我在大學的編程老師。控制器從視圖中收集數據,從視圖到模型,然後返回並將其返回到實例化控制器的位置。我沒有在控制器中使用很多if語句,而是考慮使用多種方法。這就是問題所在。 – user1121487