ASP.NET MVC 最佳实践






4.91/5 (21投票s)
ASP.NET MVC 变得越来越流行。随着应用程序规模的增长,维护也变得越来越麻烦。以下是一些
ASP.NET MVC 变得越来越流行。随着应用程序规模的增长,维护也变得越来越麻烦。以下是一些较好的实践,如果遵循这些实践,可能有助于维护我们的应用程序,并提供随着需求增加的可扩展性手段。欢迎随时添加/更新所需的实践/技巧。
请注意,此清单仅供快速参考,并非详细材料,可用作快速参考。
- 隔离控制器
将控制器与对 HttpContext、数据访问类、配置、日志记录等的依赖项隔离。可以通过创建包装类并使用 IOC 容器传入这些依赖项来实现隔离。 - IoC 容器
使用 IoC 容器管理所有外部依赖项。以下是一些著名的容器/框架。 - 没有“魔法字符串”
永远不要在代码中使用魔法字符串。这意味着将视图名称、链接文本等硬编码到视图中。诸如 T4MVC 之类的框架可以帮助解决这个问题。 更多相关内容即将推出。 - 为每个视图创建一个 ViewModel
为每个视图创建一个专门的 ViewModel。ViewModel 的作用仅限于数据绑定。 它不应包含任何表示逻辑。 - HtmlHelper
对于生成视图 HTML,请使用 HtmlHelper。如果当前的 HtmlHelper 不够用,请使用扩展方法扩展它。 这将保持设计的合理性。 - Action 方法
使用适当的动词(如 Get 或 Post)修饰您的 action 方法,视情况而定。 - 缓存
使用 OutputCache 属性修饰最常用的 action 方法。 - 控制器和领域逻辑
尽量将领域逻辑与控制器分离。控制器只应负责: - 输入验证和清理。
- 从模型中获取与视图相关的数据。
- 返回适当的视图或重定向到另一个适当的 action 方法。
- 使用 PRG 模式进行数据修改
PRG 代表 Post-Redirect-Get,以避免在 post 后刷新页面时出现的经典浏览器警告。无论何时发出 POST 请求,一旦请求完成,请执行重定向,以便触发 GET 请求。 这样,当用户刷新页面时,将执行最后一个 GET 请求,而不是 POST,从而避免不必要的用户体验问题。 它还可以防止初始请求被执行两次,从而避免可能的重复问题。 - 路由
仔细设计您的路由。 经典的路由调试器可以派上用场 http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx - 视图中不应包含领域逻辑。视图必须只负责显示数据。
- 视图不应包含表示逻辑
视图不应包含任何表示逻辑。例如,如果要仅为“管理员”角色显示“删除”按钮,则应将其抽象到 Html Helper 中。 这只是一个示例,并且会有许多场景需要这种抽象,以便于维护视图。 - 对于“删除”链接,请使用 POST 代替 GET
使用删除链接 (GET) 比使用 POST 更容易受到攻击。以下是一篇关于此的详细文章,以及一些替代方案。
http://stephenwalther.com/blog/archive/2009/01/21/asp.net-mvc-tip-46-ndash-donrsquot-use-delete-links-because.aspx