2010-04-16 115 views
3

被禁用或不下面是從一本書我讀有關應用程序的設計與MVC的摘錄:邏輯在MVC

理想的情況下,該觀點是如此簡單, 邏輯免費爲需要幾乎沒有 測試。用戶(以及 用戶之前的開發人員)只需查看 屏幕上的像素即可合理測試 的視圖。除了純粹的 之外的任何其他圖形渲染理想情況下應取出 取出視圖並放置在 控制器和模型。例如,該 包括,其中 確定是否應該啓用某個按鈕 或者在 某個點將其變爲灰色。

大膽的聲明對您意味着什麼?這將是什麼樣子?

謝謝, 杆。

回答

1

決定何時開啓或關閉按鈕的邏輯應該居住在控制器和只需調用一個方法,如view.EnableContinueButton()啓用/禁用頁面上的按鈕。

的實際代碼來啓用/禁用頁面本身應該在視圖e.g一個EnableContinueButton()方法來實現,然後它調用類似btnContinue.Enable()上的按鈕。

簡而言之,視圖應該關注UI細節(顯示/隱藏/啓用/禁用UI元素),並將所有業務邏輯處理留給控制器。通過這種方式,控制器不需要關注UI元素,視圖獨立於實際的業務邏輯工作。

e。克控制器,

public void ProcessOrder() 
{ 
    if (!controller.ValidateOrder(model.OrderNo)) 
     view.EnableContinueButton(false); 
    else 
     // Process the order 
     ... 
} 

,並在視圖

public void EnableContinueButton(bool enabled) 
{ 
    btnContinueButton.Enabled = enabled; 
} 

坦白說,我沒有得到太多的經驗在MVC(在一個項目而回,實施),但我希望控制器之間的邏輯分離並且觀點很清楚。

+0

能否請您說明不同的代碼片段多一點...我很抱歉沒有馬上得到它。竿。我確實得到了「爲什麼」,謝謝。 – Rod 2010-04-18 03:32:49

+0

我已經添加了一個代碼示例,不完全是ASP.NET特定的,但我希望它仍然有用。 – anonymous 2010-04-18 12:20:02

+0

感謝您的幫助和耐心 – Rod 2010-04-20 14:34:34

1

這是大膽的表態意味着對我說:

  • 控制器將是完全嵌套的if語句
  • 模型(或視圖模型)將是全屬性,以幫助渲染的頁面的具體方式,使對象圖難以維護。

雖然我認爲不應該在視圖中進行分析,但應該設置條件以便按鈕只需要思考 - 顯示或不顯示。

例如。如果考生是男生,只顯示考生詳情按鈕。

您可以創建一個viewmodel屬性ShowExamineeDetails。該視圖將檢查這是否是真實的。

ShowExamineeDetails =是考生男?

代碼應該在控制器中。

至於測試,我還沒有找到一個應用程序「......需要幾乎沒有測試......」