AOP切面编程,ResourceFilter顾名思义就是对于资源的控制,在逻辑编写中,结合AOP理念,会很容易想到数据资源-逻辑分离,其中数据资源来源是不确定的,逻辑是一定的;这里我们将数据资源的不确定处理可以使用ResourceFilter实现;
原因在于,.Net 程序在Filter运行顺序上,这里我们做一个简单的排序:
1,Middleware
2,Authorization Filter
3,Resource Filter
4,Exception Filter
5,Model Binding
6,Action Filter(executing、action、executed)
7,Result Filter
8,Result execution
我们可以在ActionFilter上实现,但是每一次请求都会多出其中binding和Action部分,所以,我们更好的选择是在Resource Filter中进行实现,比如,我们实现缓存业务逻辑,一次请求,如果缓存中存在,直接返回结果,如果没有,则请求Action处理,从其他资源途径获取,获取后缓存到缓存中;
以上的做法,减少了每次Controller的实例化,符合AOP某些场景的的功能,比如,程序编写早期没有使用缓存,后面又添加了缓存机制,但是又不想修改之前的逻辑代码;

当然,如果请求的数据都是接口实现,Controller中都是进行接口方法组装而成的话,其实,也是可以通过修改接口具体实现进行资源来源不确定的需求;
网友评论