VonaJS AOP编程的魔术方法如何为?
摘要:在VonaJS框架中,AOP编程包括三方面:控制器切面、内部切面和外部切面。内部切面包括两个能力:AOP Method和魔术方法。这里我们简要介绍一下魔术方法的用法。
在VonaJS框架中,AOP编程包括三方面:控制器切面、内部切面和外部切面。内部切面包括两个能力:AOP Method和魔术方法。这里我们简要介绍一下魔术方法的用法。
魔术方法
魔术方法,允许我们在 Class 内部通过__get__和__set__切入动态属性或方法
举例:Module Scope
为了让 IOC 容器的使用更加简洁和直观,VonaJS 推荐优先使用依赖查找策略,从而使用更少的装饰器函数,使用更少的类型标注。通过Module Scope对象访问模块提供的资源,就是践行依赖查找策略的机制之一
参见: 模块Scope
比如,模块 demo-student 中有一个 model student,用于 crud 操作。可以这样使用 model:
import { ModelStudent } from '../model/student.ts';
async findMany(params) {
const model = this.bean._getBean(ModelStudent);
return await model.selectAndCount(params);
}
使用魔术方法:
async findMany(params) {
return await this.scope.model.student.selectAndCount(params);
}
this.scope.model.xxx: 通过魔术方法动态获取当前模块中的 model 实例
举例:CRUD(魔术方法)
Vona ORM 采用魔术方法的机制进一步简化操作数据的代码
参见: CRUD(魔术方法)
比如,通过字段id查询学生信息,代码如下:
async findOne(id) {
return await this.scope.model.student.get({ id });
}
使用魔术方法:
async findOne(id) {
return await this.scope.model.student.getById(id);
}
系统自动从 method name getById中解析出参数id,然后调用实际的 CRUD 方法,这里就是: get({ id })
创建Class
可以在任何 Class 中实现魔术方法。
