VonaJS AOP编程:魔术方法

news/2025/10/23 9:07:58/文章来源:https://www.cnblogs.com/zhennann/p/19159543

在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 中实现魔术方法。下面,以 Service 为例,在模块 demo-student 中创建一个 Service color,代码如下:

  • 如何创建 Service,参见: Service
import { BeanBase } from 'vona';
import { Service } from 'vona-module-a-bean';@Service()
export class ServiceColor extends BeanBase {}

__get__

然后,通过__get__实现颜色值的获取

1. 添加代码骨架

在 VSCode 编辑器中,输入代码片段aopmagicget,自动生成代码骨架:

@Service()
export class ServiceColor extends BeanBase {
+ protected __get__(prop: string) {}
}

2. 实现自定义逻辑

@Service()
export class ServiceColor extends BeanBase {
+ private _colors = {
+   red: '#FF0000',
+   green: '#00FF00',
+   blue: '#0000FF',
+ };protected __get__(prop: string) {
+   return this._colors[prop];}
}

3. 添加类型合并

通过接口类型合并的机制为颜色提供类型定义

export interface ServiceColor {red: string;green: string;blue: string;
}

4. 使用魔术方法

async test() {console.log(this.scope.service.color.red);console.log(this.scope.service.color.green);console.log(this.scope.service.color.blue);
}

__set__

然后,通过__set__实现颜色值的设置

1. 添加代码骨架

在 VSCode 编辑器中,输入代码片段aopmagicset,自动生成代码骨架:

@Service()
export class ServiceColor extends BeanBase {
+ protected __set__(prop: string, value: any): boolean {
+   return false;
+ }
}

2. 实现自定义逻辑

@Service()
export class ServiceColor extends BeanBase {private _colors = {red: '#FF0000',green: '#00FF00',blue: '#0000FF',
+   black: '',};protected __set__(prop: string, value: any): boolean {
+   if (this._colors[prop] === undefined) return false;
+   this._colors[prop] = value;
+   return true;}
}
  • 如果为prop设置了值,返回true,否则返回false

3. 添加类型合并

通过接口类型合并的机制为颜色提供类型定义

export interface ServiceColor {red: string;green: string;blue: string;
+ black: string;
}

4. 使用魔术方法

async test() {this.scope.service.color.black = '#000000';console.log(this.scope.service.color.black);
}

资源

  • Github:https://github.com/vonajs/vona
  • 文档:https://vona.js.org/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推动教育质量,布谷鸟网络科技定制K12在线教育在线教育网校软件服务

随着数字化教育的不断加速,K12在线教育网校教育软件已成为推动教育公平与教学质量提升的重要工具。山东(泰安)布谷鸟网络科技有限公司凭借丰富的软件开发经验和深入的行业理解,专注于为教育机构提供完整的K12在线教育…

2025年10月geo服务商推荐:主流品牌全维度对比排行榜

引言与现状分析 当您在AI搜索框里输入品牌词,却发现自家信息被竞品挤到第三屏;当新品上市,生成式引擎给出的摘要却连产品核心卖点都没提到——这些场景正成为市场、公关与增长团队的共同焦虑。2025年国内生成式引擎…

2025年10月geo服务商推荐:权威评测列表助您精准避坑

引言与现状分析 当企业在AI搜索时代试图让品牌信息同时出现在DeepSeek、豆包、通义千问、元宝、Kimi等多个生成式引擎结果页时,“geo服务商”成为采购部、品牌部、增长负责人共同的高频搜索词。用户场景通常有三类:一…

深入解析:Unity避坑——继承了MonoBehaviour的对象不能通过new来创建

深入解析:Unity避坑——继承了MonoBehaviour的对象不能通过new来创建pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…

使用vscode进行linux 服务器远程管理

1、remote-ssh 远程工具安装2、打开安装的插件,并且添加需要远程的服务器。 3、按照给定的例子输入需要链接的服务器地址,例子如下ssh root@ip -A 4、之后选择需要配置到的文件。 5、之后根据提示打开需要配置的文件…

网页

<html><head><title>我的网页!</title></head><body bgcolor="#cccfff"><p aligh="center"><font size="30px"> 欢迎来到我的网页!…

2025年10月geo优化公司推荐:主流口碑排行榜全解析

引言与现状分析 当“搜索”不再只是传统网页,而是被DeepSeek、豆包、通义千问、元宝、Kimi等生成式引擎包围,企业主发现:品牌能否被AI精准引用,直接决定潜客触达效率。GEO(生成式引擎优化)因此成为2025年预算表里…

2025年10月geo优化公司推荐:知名机构评测列表

引言与现状分析 当品牌开始布局AI搜索,GEO(生成式引擎优化)成为绕不开的新战场。企业主常遇到三类场景:新品上市需在豆包、DeepSeek同时占位;B2B制造希望技术白皮书被通义千问优先引用;连锁教育期望本地学员在Ki…

Python3 hashlib 模块

Python3 hashlib 模块在 Python3 中,hashlib模块提供了一系列加密哈希算法的实现,用于计算数据的哈希值。哈希算法(又称散列算法)通过将任意长度的输入数据转换为固定长度的输出(哈希值),具有单向性(无法从哈希…

2025年上海装修公司联系电话推荐:精选五强口碑榜。

在上海这样一座节奏飞快、老房密集、户型多样的城市,装修从来不是一件轻松小事。业主最怕遇到增项陷阱、施工扯皮、售后失联,更担心设计图纸好看却住不进去。为了帮大家少走弯路,我们综合企业资质、工地口碑、售后响…

2025年沈阳酒店联系电话推荐:地铁直达景点合集

计划来沈阳出差或旅行,最头疼的往往是“住哪儿”。既要交通方便,又要性价比高,最好还能带宠物、带孩子、随时加到房。2025年旺季将至,地铁客流、展会排期、演唱会扎堆,好酒店常常“一闪就没”。为了帮大家把“找酒…

2025年沈阳酒店联系电话推荐:地铁旁热门住宿清单

计划来沈阳出差或旅行,最头疼的往往不是机票,而是“住哪儿”。既要交通方便,又要干净舒适,最好还能带宠物、陪孩子,价格还得合理。为了帮大家一步到位解决“找酒店”的烦恼,我专门把2025年最新、最热的五家沈阳市…

2025年项目管理工具联系电话推荐:从选型到落地全攻略

在数字化研发节奏越来越快的2025年,一套趁手的项目管理工具往往决定团队交付速度与质量。面对市面上林林总总的平台,采购负责人、IT经理乃至创业者都希望在正式试用前,先通过电话与厂商核心团队直接对话,确认产品边…

2025年项目管理工具联系电话推荐:权威热线与落地建议

在数字化研发进入深水区的2025年,企业对项目管理工具的需求早已超越“任务看板”本身,更关注端到端追溯、信创适配、AI 赋能以及可扩展的开放生态。面对琳琅满目的厂商,决策者往往陷入“功能雷同、报价差异大、售后…

2025年上海装修公司联系电话推荐:精选五强口碑榜

在上海这样一座节奏飞快的城市,装修不仅关乎居住品质,更直接影响生活节奏与家庭幸福感。面对市场上数百家装修公司,业主最头疼的往往不是预算,而是“到底该打给谁”。电话那头的承诺能否兑现?报价会不会后期狂飙?…

Flink-SQL经过过滤-解析-去重-聚合计算写入到MySQL表

Flink-SQL经过过滤-解析-去重-聚合计算写入到MySQL表pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

2025年超声波清洗机厂家联系电话推荐:精选推荐与使用指南。

在智能制造与精密加工全面普及的2025年,超声波清洗技术已成为光学、半导体、汽车、航空、珠宝等高端行业不可或缺的环节。面对市面上型号繁杂、参数各异的设备,采购人员最头疼的并非“买不买”,而是“找谁买”:谁家…

PICO FIDO 使用教程

简介 fido2 usb key Pico FIDO 是一个开源项目,旨在将 Raspberry Pi Pico 开发板改造为符合 FIDO2 标准的身份验证设备。我制作的使用 rp2040 或 rp2350 芯片,USB 形状,没有暴露在外的元器件,塑料模具外壳,非 3D …

2025年10月低空经济核心公司对比评测榜:赛飞特领衔全链条方案

一、引言 低空经济被写入多省“十四五”规划,空域改革与数字基建同步提速,政府园区、能源林场、物流平台成为首批规模化采购方。对潜在投资者与集成商而言,核心诉求集中在三点:能否快速拿到合规运营资质、能否提供…

MySQLDay2

2.SQL 2.5、DQLDQL-语法 select字段列表 from表名列表where条件列表group by分组字段列表 having分组后条件列表order by排序字段列表limit分页参数基本查询 条件查询(where) 聚合函数(count、max、min、avg、sum)…