在大型开发项目中,总会提到面向切面编程的概念,即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。
时间: 2024-11-08 22:48:10