MVC过滤器-AOP思想初探

来源:互联网 发布:ug编程时不允许空标记 编辑:程序博客网 时间:2024/06/01 23:49

AOP:面向切面编程。“给程序统一添加新功能的一种思想”。

它是对传统OOP编程的一种补充。


OOP关注需求功能模块,封装良好的类,并让他们有属于自己的行为,侧重业务逻辑的实现。

AOP关注通用功能,而不关注业务逻辑,将不属于业务逻辑的部分给抽取出来。例如:日志、异常捕获、权限验证(拦截).


在web应用程序(Webform/MVC),我们登录后经常把用户信息存入Session中.然后再每个页面进行验证 用户是否登录,没有登录就跳转到登录页面。如:

public ActionResult Index()

{

if(Session["User"]==null)

{

return RedirectToAction("/Login/Index");

}

}

这个和业务逻辑 无关,如果每个页面都这样去验证用户是否登录,就太麻烦了。

公共的部分给抽取出来。在ASP.NET MVC中,filter就是一种面向切面的技术了。


AOP是预先定义的一组特性Attribute,使它具有拦截方法的功能,可以让你在执行代码之前、之后,处理你的事情。

ASP.MET MVC中,有ActionFilter,ExceptionFilter。


 1.Action过滤器继承ActionFilterAttribute类,Action执行之前执行一段代码,重写OnActionExecuting方法,执行完毕重写OnActionExecuted

所以,我们写一个Action过滤器,在filtreConfig中注册为全局filter,这样执行每个Action都可以去验证Session了。




2.Exception过滤器继承HandleErrorAttribute类,在程序发生异常的时候执行一段代码。重写OnException方法。

在程序添加、删除、修改数据时候,有可能出现异常,我们通常做法都是在每个Action中使用try...catch代码块出现异常弹出异常信息给用户。


这个也是和业务逻辑无关的,如果每个Action中都写try...catch 就显得太臃肿。

简化代码,注册全局的异常过滤器,用来捕捉应用程序的异常,并进行相应的处理(自定义消息返回格式{IsSuccess:xx,msg:xx})


这样当程序出现异常,过滤器已经捕捉到了,并根据自定义的消息格式返回给前台。就不用再每个Action中写try...catch了。简化了代码。





0 0
原创粉丝点击