AOP(Aspect oriented programming)面向切面编程。说成切面不容易理解,代码哪里有切面?又不是三维物体。概念不管,我们从其思想来理解这个名词吧。 AOP的主要思想是把相同、相似的并且零散的逻辑抽离出来,统一处理;这样不仅维护起来方便,也让代码更加关注自己本身,清晰明了。
比如我们常见的权限检查、日志记录、异常处理等都是散乱在系统各个地方,比如发表一篇文章的代码:
public void Post(Article article)
{
if(currentUser is null)
throw new AuthException("您还没有登录");
else
ArticleManager.Save(article);
}
本来一句话ArticleManager.Save就能搞定的事情,现在要加上if else 还要处理异常,代码显得异常难看也难以维护。假如换成
[Authorize]
public void Post(Article article)
{
ArticleManager.Save(article);
}
用AuthroizeAttribute来处理权限问题,这样代码清晰很多,而且可以复用这个Attribute,这么好的思想就是AOP思想。
当然Attribute只是一种实现方式,Attribute也是调用Post方法前,通过反射得到Attribute,然后执行其代码,
平时我们