什么是AOP?
举例:某项目,要开发100个API接口,每个接口必须做【调用验证】、【入参、出参、异常日志保存】
实际上,每个接口里【调用验证】【入参、出参、异常日志保存】都是一样的代码,每个接口都要重复这么一段代码,累死了。
有没有办法可以把这些重复的工作一次性做完?有,用AOP框架,把【调用验证】、【入参、出参、异常日志保存】的事放到切面去执行。
说白了AOP就是拦截器,可以在你的方法执行前后做自定义操作,比如:
1.在接口调用前做个拦截,在拦截里边做【调用验证、入参日志记录】;
2.在接口调用后做个拦截,在拦截里做【出参日志保存】
3.把接口方法包含在try-catch里,在catch里保存【异常日志】
我常用的AOP框架是Castle,当然.net自带的也有类似于AOP的东西,比如那个Globe.ascx里有【应用启动前、请求前、请求中、请求后、应用结束时】生命周期事件,还有MVC里边的Attribute,也可以根据需要用一用。
什么是IOC、DI?
举例:还是某项目,开发100个API接口,使用三层,每个接口里边new一个自己的BLL,每个BLL里都要new一个自己的DAL,总共要new 200下,很累,而且计算机new一个对象是需要一定的时间的,一环扣一环的new,层级多了会导致反应明显变慢。
有没有一种办法,可以把这些重复的代码剔除掉,也就是每个请求接口里边不用操心new BLL的事,每个BLL里边也不用操心new DAL的事,直接拿来就用。
用IOC框架,可以把原本需要接口亲自new的对象,提前被动的注入(DI)进来,使接口可以直接用,更专注于自己的业务代码。
.net 方面,IOC框架挺多,有autofac、Unity等,其中autofac最轻便,我比较喜欢用这个。