2012-06-02 35 views
2

這是我們第一次使用這種模式(我們甚至不確定這種模式適合於這個項目),我和我的夥伴有幾個問題。 我們正在設計一個簡單的應用程序來顯示有關權限的文件。MVC設計問題 - 每個組件的角色

  1. 假設「Joe」當前已登錄到系統,那麼將「Joe」作爲活動用戶的正確保存位置?
  2. 控制器在這種情況下的角色是什麼?假設「Joe」想要登錄到系統。他輸入密碼並點擊登錄,視圖是否應該直接使用模型驗證細節?還是應該要求管制員爲他做?

  3. 假設登錄成功,現在會發生什麼?視圖應該作爲觀察者監聽模型並等待登錄正確的響應,然後切換窗口?還是應該控制器有一個名爲boolean ValidateLogin()的方法,視圖會調用並相應地執行?

正如你所看到的,我們很困惑,任何幫助將不勝感激。

+0

的第一個問題可能需要澄清。通過「保存」,您是否意味着由於UI操作而導致的特定模型操作?如果是這樣,那是一個與模型對話的Controller函數。或者如果你的意思是「維持喬作爲活躍用戶」,那麼這是會話的一個特點,我認爲這是會計師的責任。 – halfer

+0

@halfer每個用戶在登錄時顯示他有權查看的所有文件。現在,假設模型有一個方法getFiles(用戶用戶),它返回'用戶'有權查看的文件列表。誰應該提供'用戶'?模型應該知道活躍用戶是誰?管理員應該知道活躍用戶是誰? – Shmoopy

+0

對,竅門:模型肯定不會知道活躍用戶是誰。這應該由控制器維護和讀取,並提供給模型方法(這與單元測試有助於分離)。你的方法很好:模型中的'getFiles(用戶用戶)'意味着必須提供'user'給它 - 這是控制器的工作。 [這個答案](http://stackoverflow.com/a/9554149/472495)也可能有助於解決用戶安全問題。 – halfer

回答

3
  1. 會話/數據庫/配置文件(這是單個或多個用戶系統?)
  2. 在一些web框架*:該視圖通過登錄數據到控制器,傳給模型,該模型將驗證,返回導致控制器,並給出正確的視圖作爲響應。當然,如果視圖想要直接驗證數據到模型也是很好的,但IMO視圖模型通信不應該涉及任何邏輯,只有數據更新通知。
  3. 我認爲這部分回答在上面的答案2中。雖然控制器應該能夠銷燬/更改登錄視圖(當登錄成功時,通常視圖應該相應地改變)。

*這是因爲在Web應用程序中,通常視圖不能直接與模型對話,而不是在桌面應用程序中。這仍然是一個MVC,只是一個名爲MVA的變體。

0

根據您的要求,我建議您使用此項目MembershipStarterKit開始。

它具有進行基本認證和角色管理的樣本。

它也使用.Net會員提供商,所以你不會重新發明輪子。

+2

這假定OP對ASP.net MVC感興趣 - 我懷疑他們只是對MVC設計模式感興趣。 – halfer

+0

@halfer對不起,我沒有注意到標籤只是MVC – Anas

0
  1. 儲存於會議
  2. 任何客戶端驗證可以通過視圖直接與模型(通過DataAnnotations)來完成。而對於數據庫調用它穿過位指示
  3. 成功登錄後,控制器將呈現相應的視圖