面向切面编程也称AOP,主要作用是将与核心业务逻辑无关的功能抽离出来,以动态织入的方式掺入业务逻辑模块中。如日志记录功能等。可以保持业务逻辑的纯净,高内聚性;便于复用日志模块等
- 装饰器模式
给对象动态添加职责(即用即付)的方式为装饰器模式
实现一个插件式的表单验证:校验+提交
一般实现:
装饰器实现:function formSubmit(obj){ const {tel,name} = obj if(!!tel){ console.log('手机号不能为空') return false } if(!!name){ console.log('用户名不能为空') return false } ajax('https://xxx.com/login',obj) }
function validForm(obj){ const {tel,name} = obj if(!!tel){ console.log('手机号不能为空') return false } if(!!name){ console.log('用户名不能为空') return false } } function postForm(){ ajax('https://xxx.com/login',obj) } function before(beforeFn,fn){ return function mixFn(...rest){ if(!beforeFn.apply(this,reset)){ return false } return fn.apply(this,reset) } } const formSubmit = beforeFn(validForm,postFrom)