翻译自:
ASP.NET MVC是一个轻量级的、高度可测试的展示框架。
问题:如何从ASP.NET MVC3迁移到ASP.NET MVC4?
1、在web.config文件定位下面文本: System.Web.Mvc, Version=3.0.0.0 System.Web.WebPages, Version=1.0.0.0 System.Web.Helpers, Version=1.0.0.0 System.Web.WebPages.Razor, Version=1.0.0.02、将上面的文本用下面的文本替换: System.Web.Mvc, Version=4.0.0.0 System.Web.WebPages, Version=2.0.0.0 System.Web.Helpers, Version=2.0.0.0, System.Web.WebPages.Razor, Version=2.0.0.0,3、删除所有项目中对ASP.NET MVC 3程序集的引用: System.Web.Mvc (v3.0.0.0) System.Web.WebPages (v1.0.0.0) System.Web.Razor (v1.0.0.0) System.Web.WebPages.Deployment (v1.0.0.0) System.Web.WebPages.Razor (v1.0.0.0)4、添加对ASP.NET MVC 4程序集的引用: System.Web.Mvc (v4.0.0.0) System.Web.WebPages (v2.0.0.0) System.Web.Razor (v2.0.0.0) System.Web.WebPages.Deployment (v2.0.0.0) System.Web.WebPages.Razor (v2.0.0.0)
以下是我们在开发ASP.NET MVC应用时常用的7个最佳实践。
1、缓存数据
我们可以通过缓存不常变化的数据来改善应用的性能。这将节省服务端与客户端间的带宽(带宽就是钱)。但是注意不要缓存敏感数据,不要缓存需要验证的数据,不要缓存用户私人信息,也不宜缓存经常动态变化的数据。比如下面:
public class HomeController: Controller{ [OutputCache(Duration=3600, VaryByParam="none"] public ActionResult Index() { ... }}
2、将数据访问逻辑从控制器中解耦
这个最主要的就是体现职责分离原则。ASP.NET MVC控制器决不应该包含数据访问逻辑。ASP.NET MVC中的控制器的职责只是根据用户请求选择合适的视图返回给用户。我们应该利用Repository Pattern实现从控制器中分离数据访问逻辑。我们或许需要在运行时注入合适的Repository。比如下面的一个例子(.NET中常见,Java中我基本没见过,我自己写的一个例子):
public class HomeController: Controller{ public IRepository BookRepository { return BookRepository.Instance(); } ...}
3、使用Master视图模型
在ASP.NET应用中,我们经常需要使用Master Pages。每个页面都继承Master Page以获得一致的外观和共同的功能(如工具栏)。我们可以使用下面的代码来设定Master视图模型:
public class ViewModelBase{ public ViewModeBase() { ... }}
4、为视图指定强类型模型(Strongly Typed Model)
5、使用Data Annotation进行服务端代码数据验证
我们可以使用System.ComponentModel.DataAnnotations程序集的功能来验证服务端代码,只需要添加必需的属性,如下:
public class Employee{ [Required(ErrorMessage="Employee name must not be empty")] public string Name { get;set; }}
6、利用模型绑定
比如有如下代码:
[AcceptVerbs(HttpVerbs.Post)]public ActionResult Create(){ Employee employee = new Employee(); employee.Name = Request.Form["Name"]; // ... return View();}
可以利用模型绑定,改写成下面的代码:
public ActionResult Create(FormCollection values){ Employee employee = new Employee(); employee.Name = values["Name"]; // ... return View();}
7、使用缓存框架
比如Microsoft的Velocity以及开源框架Memcache