2010-09-11 30 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被返回,但是这两个方法并不重要。