2009-07-29 26 views
4

我想知道控制器從哪裏獲取用戶輸入(用於爲模型提供)。由於輸入媒體與用戶密切相關,因此不應該意識到獲取用戶數據的具體方式?但是,我怎樣才能從視圖中分離出控制器呢?他們的目的是否可以使兩者完全獨立?用戶輸入來自MVC體系結構?

例如: 當我有一個應用程序使用視圖curses庫它暗示它只能通過終端訪問。使用curses方法讀取控制器中的用戶數據會破壞封裝,但在視圖上調用方法與顯示模型無關。

回答

1

考慮讓視圖和控制器通過Observer pattern進行通信。 Controller使用View將自己註冊爲Observer。當用戶將數據輸入到視圖並按下Enter時,視圖將解釋數據並通知其觀察者有可用數據。控制器然後可以通過公共方法從視圖中獲取數據。

3

在MVC中,控制器從視圖中獲取其用戶輸入。

0

我認爲這個視圖應該在控制器上有一個回調,通過用戶輸入發送。在Web架構中,通過http請求將用戶輸入發送回服務器的能力提供回調。

就你而言,你的ncurse front應該可能有某種回調方法給控制器組件發回用戶輸入。

1

我不認爲這個視圖實際上與輸入數據有很大關係。如果您看到用戶直接與控制器通信,我發現MVC更容易可視化。控制器從用戶接收數據並將視圖發回。在許多系統中,視圖引擎自身有一些有限的更新方式(即文本輸入顯示在發送到控制器之前鍵入的內容)。但是對於任何MVC類型的體系結構,只要它們都能夠處理相同的數據,就可以用任何其他視圖替換任何視圖。

例如。輸入用戶名可以在任何支持輸入字符串的系統上完成。控制器接受一個字符串,因此可用於Web應用程序,終端應用程序或GUI應用程序。

+0

如果View1有Button1,而View2沒有?控制器應該如何從兩個視圖中獲得它的輸入(點擊Button1)? – Kaerber 2014-07-28 20:57:28

0

那麼,

我會盡量讓你更具體。給你可以看到的ppl的模糊/抽象的答案,不掌握主題,並沒有幫助。

MVC - >模型視圖的Controler

有許多MVC實現的,我不知道你的情況,但我給你一個。

最常見的MVC實現的行爲這樣的..

視圖< - >的Controler < - >型號

在Web場景..

的看法是你的HTML頁面和數據輸入會以一種形式發生。

<form action=/home/createuser method=post> 
...code goes here... 
</form> 

家將是你的控制器(一個名爲home的類),並創建一個在家中的方法。

public class Home extends Controller { 

    public void createUser(Userform f){ 
     ...create user... 
    } 
} 

該表單會將數據作爲參數提交給方法。如果是這種情況,Createuser會將它們處理成與模型交談並稍後保留數據。