ASP.NET MVC 3 & Unity.MVC3

来源:未知 责任编辑:责任编辑 发表时间:2013-11-15 19:50 点击:

最近学习了下 ASP.NET MVC,比较之前的 WebForm 没有了 IsPostBack 的判断,事件处理也被 Action 取代。MVC 中 WebForm中大量的事件处理中UI绑定,混杂的 js 注入, style 修改没有了;服务端控件不用了,结局是 View 被释放了,Controller可以被单元测试了,拿着 ViewModel 可以快速替换 View。(说句实话要不是有 Razor 这样的页面引擎加上 VS IDE 的强力智能感知,ASP.NET MVC 和 JSP 没有区别,说不定还会有人把 strust 标签,spring 标签拿来在 .NET 上封装一遍)

再加上现在的 EF,Model层以及DAL实现很自然的交给了 EF等ORM框架。加上现在的成熟的 Repository Pattern 和 UnitOfWork Pattern 实践上的Service分层也变成约定俗成。(关于 Repository 和 UnitOfWork 参看:Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application) 。分离出 Repository, UnitOfWork  就是避免在 Controller 里直接写入 Linq2Db 的代码,这样难以实现 Mockup,好比下面的代码:
(详细参考:Walkthrough: Using TDD with ASP.NET MVC)
【没有使用 Repository Pattern 的代码】
[csharp]
public class HomeController : Controller { 
 
    ContactEntities _db = new ContactEntities(); 
 
    public ActionResult Index() { 
        var dn = _db.Contacts; 
        return View(dn); 
    } 

【使用 Repository Pattern 的代码】
[csharp]
namespace MvcContacts.Models { 
    public class EF_ContactRepository : MvcContacts.Models.IContactRepository { 
 
        private ContactEntities _db = new ContactEntities(); 
 
        public Contact GetContactByID(int id) { 
            return _db.Contacts.FirstOrDefault(d => d.Id == id); 
        } 
... 
测试可以用个 Mock Repository,_db 数据从哪来就自由了...
[csharp]
namespace MvcContacts.Tests.Models { 
    class InMemoryContactRepository : MvcContacts.Models.IContactRepository { 
        private List<Contact> _db = new List<Contact>(); 
... 
而 Controller 变成这样: www.2cto.com
[csharp]
public class HomeController : Controller { 
        IContactRepository _repository; 
        public HomeController() : this(new EF_ContactRepository()) { } 
        public HomeController(IContactRepository repository) { 
            _repository = repository; 
        } 
        public ViewResult Index() { 
            throw new NotImplementedException(); 

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 浅析.NET下XML数据访问新机制
  • asp.net 面试+笔试题目第1/2页
  • C# 邮件地址是否合法的验证
  • asp.net 设置GridView的选中行的实现代码
  • C#高级编程:数据库连接[1]
  • 经典C++程序1
  • IIS 自动回收导致后台定时器失效的问题解决
  • ASP.NET&#160;GridView列表代码示例
  • Asp.net MVC源码分析--Action Filter的链式调用
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1