Thunderdome MVC - 為什麼在 MVC 中使用單一模型?
當 Jeremy & Chad發布他們的 FubuMvc 項目時,他們提到的差異化因素之一是他們的“Thunderdome Principal”:
“Thunderdome 原則”——所有 Controller 方法都接受一個 ViewModel 對象(或在某些情況下為零個對象)並返回一個 ViewModel 對象(一個對象進入,一個對象離開)。Controller 類永遠不會直接暴露給與 HttpContext 相關的任何內容。沒有什麼比看到人們嘗試編寫模擬或存根新 IHttpContextWrapper 介面的測試更讓我哭泣的了。同樣,Controller 方法不返回 ViewResult 對象,並且通常與所有 MVC 基礎結構分離。我們很早就採用了這種策略,以使控制器測試在機械上更簡單。它確實實現了這個目標,但它也使 Controller 程式碼非常精簡且易於閱讀。我們將在 KaizenConf 解釋這是如何工作的。
他們*的“一個 ViewModel(或零)”*方法的優勢是什麼?
它的主要好處是它是一種約定,並使我們所有控制器的事情保持一致。它使我們更容易設置可以在集成測試場景中初始化環境的測試“上下文”/夾具。在大多數情況下,Conventions == Rapidity,因為它從您的設計考慮中消除了許多“假設”場景。
由於我們所有的控制器操作都遵循相同的模式,我們可以假設很多事情,它可以加速和簡化我們的控制器集成測試工作。
控制器動作有多個參數當然沒有錯,但我們發現擁有一個實際的模型對象為我們提供了一些額外的功能,因為模型可以包含簡單的邏輯並公開便利屬性,這些屬性可以簡單地處理一些更複雜的方面它自己的狀態等——基本上,這是擁有任何豐富模型的論據,並不是 Thunderdome/OMIOMO 模式所獨有的。