MVC过滤器 实现AOP(入门)

    在大型开发项目中,总会提到面向切面编程的概念,即AOP。OOP的思想,对任何事物来说,都具有方法和属性,不存在无主的方法。

 

什么是AOP呢?开发切面有什么好处呢?

    AOP面向的是一个切面。使用切面,把公共的功能抽出来。单独开发。然后将公共部分的实现,在开发人员不知情的情况下,添加进去。

    开发人员,一般都只是开发自己的功能。专注自己的业务逻辑。

    如果,在某一部分的功能开发中,都必须处于登录状态,那么里面每个功能中都写  判断用户状态的代码。

这样开发,代码重复性高,不易维护,开发慢……

 

    为了提高编程效率,不得不将一些公共的方法抽离出来。

    但是,问题又来了。方法抽出来了。在每个功能中,都需要调用该方法。

一不小心少些一个,又是麻烦事……

 

怎样,才能避免这种情况呢?引入AOP 

在MVC前台框架中,MVC中Controller中的Filter可以将公共的代码抽离出来。

 

定义过滤器:

public class TestFilterAttribute:ActionFilterAttribute
    {
        public string Message { get; set; }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            filterContext.HttpContext.Response.Write("Action执行之前"+Message+"<br />");
        }

        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            filterContext.HttpContext.Response.Write("Action执行之后"+Message+"<br />");
        }

        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            base.OnResultExecuting(filterContext);
            filterContext.HttpContext.Response.Write("返回Result之前"+Message+"<br />");
        }

        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
            filterContext.HttpContext.Response.Write("返回Result之后"+Message+"<br />");
        }
    }


编写Controller方法,使用过滤器:

[TestFilter(Message="Action")]
public ActionResult Index()
{
     HttpContext.Response.Write("Action正在执行···<br />");
     return Content("正在返回Result···<br />");
}


执行顺序效果:

技术分享

    利用MVC中的Filter可以实现日志。将写日志的方法放到Filter中,这样Controller中的方法,在执行的过程中就会写日志。

    而开发人员不需要开发 写日志的功能。

    对于面向切面的编程,当然不会局限在某一层中。而使用MVC中的Filter仅仅解决在前台的问题。至于将切面控制到其他层中,请继续深入Spring.net AOP

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。