在ASP.Net MVC中,如果我在控制器上有一個返回視圖的方法,那麼該方法應該是ViewResult類型還是更一般的ActionResult?讓方法的數據類型儘可能具有特定性或更一般性會更好嗎?
回答
類似的問題被要求在ASP.NET論壇:http://forums.asp.net/t/1423519.aspx
基本上,它歸結爲風格 - 在OOP中,你試圖返回,你能給出的情況最特殊的類型。對於您擁有的每種方法,您都不會返回object
- 有時您會返回string
,有時List
,有時是自定義類。
在論壇中回帖,有人從他的書中引用了斯蒂芬·瓦爾特:
注意此操作方法,具體 宣佈,它返回的ViewResult實例 。如果取而代之,方法返回類型 是ActionResult(所有操作結果的基類爲 ),它將只會運行 。實際上,有些 ASP.NET MVC程序員聲明所有的 他們的動作方法都返回一個非特定的ActionResult,即使他們知道 總是會返回一個特定的子類。然而,在面向對象的 編程中,這是一種行之有效的 原理,方法應該返回 它們可以的最具體類型(如 以及接受它們可以使用的最一般的 參數類型)。遵循 這個原則最大限度地提高了便利性 和靈活性的代碼,調用 您的方法,如您的單元測試。
因此,使用更具體的ViewResult
將是首選,特別是從單元測試的角度來看。
的方法是最有用的,當它的參數是儘可能通用(例如,IEnumerable<T>
而不是數組)和它的返回值是作爲特定的(例如的,IList<T>
代替IEnumerable
)儘可能。
與返回值,但是,它仍然是更好地使用(的IList<T>
代替List<T>
如)接口或抽象類型,而不是具體的類型,這將給你一些靈活性與改變實現或至少與調用代碼減少耦合。
如果您沒有預見將結果更改爲任何其他類型的ActionResult,則可以使其返回ViewResult。如果你沒有預見到任何使用ViewResult的調用者,它可以作爲一個ActionResult被返回,但是這兩個方法並不重要。
- 1. 重複數據或更好的性能?
- 2. 更好(更高性能)的方式來獲得特定的DIV?
- 3. FB.Data.query具有更好的性能
- 4. TaskCompletionSource具有更好的可伸縮性?
- 5. 具有一般和特定屬性的類
- 6. 這可能使用LEAD或者有更好的方法嗎?
- 7. 哪個具有更好的性能,Java或DB功能?
- 8. 服務器發送的事件或SignalR性能會更好嗎?
- 9. 使用虛擬值會使模型的性能更好嗎?
- 10. 將模塊的狀態存儲爲類或數據屬性會更好嗎?
- 11. 如何讓pyodbc輸出更具可讀性/更好?
- 12. 具有未指定類型的通用方法可能嗎?
- 13. 如果像會話一樣使用數據緩存會有更好的性能
- 14. 具有更好性能的(*)或(域名)SQL選擇語句?
- 15. 哪一個有更好的性能?
- 16. 實現更好的數據庫性能
- 17. 更好的性能
- 18. 哪一個更好的性能視圖狀態或會話
- 19. 如何讓這段代碼更具功能性和可讀性?
- 20. 哪種方法會產生更好的性能?
- 21. 核心數據性能是否更好,屬性更少?
- 22. 檢查,如果類型具有或繼承具有一定屬性的類型
- 23. 在方法簽名中使用類或變量會更好嗎?
- 24. ReadOnly數據庫性能更好
- 25. 方法可讀性和更短嗎?
- 26. 這個sql算法有更好的性能嗎?
- 27. 哪種方式更好地定義類型特徵或行爲?
- 28. xPath vs DOM API,哪一個具有更好的性能
- 29. 哪一個查詢具有更好的性能?
- 30. 更好的性能:OnDataBound或迭代PreRender
謝謝大衛!期待本週的用戶羣。 – 2010-09-11 04:17:08
我認爲這是史蒂文桑德森寫的報價 – 2011-10-20 13:40:28