在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. FB.Data.query具有更好的性能
- 3. TaskCompletionSource具有更好的可伸縮性?
- 4. 哪個具有更好的性能,Java或DB功能?
- 5. 使用虛擬值會使模型的性能更好嗎?
- 6. 如何讓pyodbc輸出更具可讀性/更好?
- 7. 具有未指定類型的通用方法可能嗎?
- 8. 具有更好性能的(*)或(域名)SQL選擇語句?
- 9. 哪一個有更好的性能?
- 10. 實現更好的數據庫性能
- 11. 如何讓這段代碼更具功能性和可讀性?
- 12. 哪種方法會產生更好的性能?
- 13. 哪種數據庫性能更好?
- 14. 方法可讀性和更短嗎?
- 15. 這個sql算法有更好的性能嗎?
- 16. 哪一個查詢具有更好的性能?
- 17. xPath vs DOM API,哪一個具有更好的性能
- 18. 更好的性能:OnDataBound或迭代PreRender
- 19. 更好性能的模型設計
- 20. Coldfusion可以使用Java方法/對象來獲得更好的cfquery性能嗎?
- 21. 如何讓課程更具可測性?
- 22. 數據集關係或linq尋找更好的性能?
- 23. 更好的性能:多個包含或預處理數據?
- 24. 更改屬性的數據類型
- 25. 具有更多特定參數類型的Objective-C委託方法
- 26. 以下哪種方法對大表有更好的性能?
- 27. 我可以組合兩個或更多具有共同屬性的類嗎?
- 28. Tomcat異常類型忽略更一般的特定異常
- 29. 更好的命名約定或更好的結構/類嗎?
- 30. jQuery或Prototype會更好嗎?
謝謝大衛!期待本週的用戶羣。 – 2010-09-11 04:17:08
我認爲這是史蒂文桑德森寫的報價 – 2011-10-20 13:40:28