在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