2010-09-11 29 views

回答

4

類似的問題被要求在ASP.NET論壇:http://forums.asp.net/t/1423519.aspx

基本上,它歸結爲風格 - 在OOP中,你試圖返回,你能給出的情況最特殊的類型。對於您擁有的每種方法,您都不會返回object - 有時您會返回string,有時List,有時是自定義類。

在論壇中回帖,有人從他的書中引用了斯蒂芬·瓦爾特:

注意此操作方法,具體 宣佈,它返回的ViewResult實例 。如果取而代之,方法返回類型 是ActionResult(所有操作結果的基類爲 ),它將只會運行 。實際上,有些 ASP.NET MVC程序員聲明所有的 他們的動作方法都返回一個非特定的ActionResult,即使他們知道 總是會返回一個特定的子類。然而,在面向對象的 編程中,這是一種行之有效的 原理,方法應該返回 它們可以的最具體類型(如 以及接受它們可以使用的最一般的 參數類型)。遵循 這個原則最大限度地提高了便利性 和靈活性的代碼,調用 您的方法,如您的單元測試。

因此,使用更具體的ViewResult將是首選,特別是從單元測試的角度來看。

+0

謝謝大衛!期待本週的用戶羣。 – 2010-09-11 04:17:08

+1

我認爲這是史蒂文桑德森寫的報價 – 2011-10-20 13:40:28

2

的方法是最有用的,當它的參數是儘可能通用(例如,IEnumerable<T>而不是數組)和它的返回值是作爲特定的(例如的,IList<T>代替IEnumerable)儘可能

與返回值,但是,它仍然是更好地使用(的IList<T>代替List<T>如)接口或抽象類型,而不是具體的類型,這將給你一些靈活性與改變實現或至少與調用代碼減少耦合。

如果您沒有預見將結果更改爲任何其他類型的ActionResult,則可以使其返回ViewResult。如果你沒有預見到任何使用ViewResult的調用者,它可以作爲一個ActionResult被返回,但是這兩個方法並不重要。