Best Practices for ASP.NET MVC
基本上,这个"问题"旨在收集有关社区最佳实践的信息。原因如下:
- 缺乏基于社区的ASP.NET MVC资源来实现最佳实践。是的,我知道wiki.asp.net。
- 我很痛苦地意识到,ASP.NET MVC上的ASP.NET wiki非常小,非常过时,需要微软在社区对它做任何事情之前充实更多。
- 我对一般的最佳实践非常感兴趣,在过去的一年里我在ASP.NET MVC方面拥有相当的经验,但我也注意到我不是专家,而且我绝对可以改进。我相信这篇文章能帮到你。
我认真考虑了一下我是否应该问这个问题,甚至一直想在meta上创建一个关于创建这个问题的问题。:)
我要找的是有关ASP.NET MVC所有方面的最佳实践信息。控制器、模型、扩展、HTML助手、路由构建器、TDD。
在过去,我发现了一些资源,如Kazi Manzur Rashid的最佳实践(第1部分和第2部分)帖子非常有用,以及Maarten Balliauw的权势,但这些都有些干涸了,我希望从不同的人那里得到一个更加动态和不断增长的信息库,而不仅仅是来自有学问的个人的偶尔的博客条目。情人。像这样的信息很少,而且还远远不够,与ASP.NET MVC社区资源的差距甚至更小。
一般的MVC模型随意添加模型链接
意见控制器随意添加控制器链接
指南:- 每个答案一个"最佳实践"
- 花点时间解释为什么它比其他选择更受欢迎。
- 首先阅读现有的答案-如果你看到你同意的答案,请向上投票;如果你不同意,请向下投票,并留下解释原因的评论。
- 如果你能扩展为什么它是"最好的",请随意编辑任何答案!
另外,请不要只写"菲尔·哈克、斯科特·古思里、罗伯·科尼或斯科特·汉斯曼的任何东西"!
使用t4mvc消除整个项目中的所有魔力字符串和魔力匿名类型。这将有助于您稍后在项目中重构,并且(除了必须仍然确保路由定义良好之外)所有操作调用都会得到它们的正确参数。它会像这样改变通话:
1 | <%= Html.ActionLink("Link text","Products","Details", new { id = Model.Id }) %> |
进入:
1 | <%= Html.ActionLink("Link text", MVC.Products.Details(Model.Id)) %> |
不要让任何逻辑出现在你的视野之外。您的控制器应该决定显示什么-您的视图应该是哑的。
视图模型DTO对象:BaseViewModel抽象类,具有用于呈现页面元数据、菜单和每页上显示的所有其他内容的属性。所有其他ViewModel类都继承自BaseViewModel。
尽可能保持你的控制器"薄"。只需让他们验证来自表单的数据,然后调用模型(完成所有实际工作),就可以在下一个视图中返回数据。
拥有复杂的控制器有点打破了MVC的概念。
"MVC in action"一书有两个免费章节。
http://www.manning.com/palermong/
第12章是最佳实践。
虽然不是一个最佳实践站点,但下面的站点使用ASP.NET MVC做了很多可能被认为是最佳实践的事情。
http://www.codeplex.com/mvcontrib
这是我处理应用程序中所有下拉列表的方式,我想与您共享,因为我认为这是一种最佳实践:
为ASP.NET MVC中的所有DropDownList提供一个editorTemplate