当前位置: 首页 > wzjs >正文

常用网站缩略图自定义网站备案的意义

常用网站缩略图自定义,网站备案的意义,免费网络推广软件,手机html5网站开发一、装饰器核心作用与启用 1. ​​本质与定位​​ ​​元编程工具​​:在编译阶段动态修改类/方法/属性的行为(不改变源码)​​启用配置​​:需在 tsconfig.json 中开启: {"compilerOptions": {"expe…

一、装饰器核心作用与启用

1. ​​本质与定位​
  • ​元编程工具​​:在编译阶段动态修改类/方法/属性的行为(不改变源码)
  • ​启用配置​​:需在 tsconfig.json 中开启:
    {"compilerOptions": {"experimentalDecorators": true,"emitDecoratorMetadata": true  // 支持反射元数据}
    }
2. ​​五大类型与参数​
​类型​​作用目标​​接收参数​
类装饰器类构造函数target: Function(构造函数)
方法装饰器类方法target: any, propertyKey: string, descriptor: PropertyDescriptor
属性装饰器类属性target: any, propertyKey: string
参数装饰器方法参数target: any, propertyKey: string, parameterIndex: number
访问器装饰器getter/setter同方法装饰器

二、工程化应用场景详解

1. ​​增强代码可维护性​
  • ​日志跟踪​​:自动记录方法调用参数与耗时

    function LogMethod(target: any, key: string, descriptor: PropertyDescriptor) {const original = descriptor.value;descriptor.value = function (...args: any[]) {console.log(`[${new Date()}] 调用方法 ${key},参数:`, args);return original.apply(this, args);};
    }class UserService {@LogMethodgetUser(id: number) { /* 业务逻辑 */ }
    }
  • ​性能监控​​:统计关键方法执行时间

    function MeasureTime(target: any, key: string, descriptor: PropertyDescriptor) {const original = descriptor.value;descriptor.value = function (...args: any[]) {const start = performance.now();const result = original.apply(this, args);console.log(`方法 ${key} 耗时: ${performance.now() - start}ms`);return result;};
    }
2. ​​提升系统健壮性​
  • ​数据验证​​:自动校验参数或属性合法性

    function ValidateEmail(target: any, key: string) {let value = target[key];Object.defineProperty(target, key, {set: (newVal) => {if (!/^\S+@\S+\.\S+$/.test(newVal)) throw new Error("邮箱格式错误");value = newVal;}});
    }class User {@ValidateEmailemail!: string;
    }
  • ​权限控制​​:拦截未授权操作

    function Permission(role: string) {return (target: any, key: string, descriptor: PropertyDescriptor) => {const original = descriptor.value;descriptor.value = function (...args: any[]) {if (!currentUser.roles.includes(role)) throw new Error("权限不足");return original.apply(this, args);};};
    }class AdminService {@Permission("ADMIN")deleteUser() { /* 敏感操作 */ }
    }
3. ​​框架级应用​
  • ​依赖注入 (DI)​​:自动实例化依赖对象(如 Angular/NestJS)

    // 模拟 Angular 的 @Injectable
    function Injectable() {return (target: Function) => {// 注册到 DI 容器Container.register(target.name, new target());};
    }@Injectable()
    class LoggerService {log(message: string) { console.log(message); }
    }
  • ​路由绑定​​:声明式 API 路由配置(如 Express 框架)

    function Get(path: string) {return (target: any, key: string) => {Router.register("GET", path, target[key]);};
    }class UserController {@Get("/users")getUsers() { /* 返回用户列表 */ }
    }
4. ​​设计模式实现​
  • ​AOP(面向切面)​​:分离业务逻辑与横切关注点

    function Transactional(target: any, key: string, descriptor: PropertyDescriptor) {const original = descriptor.value;descriptor.value = async function (...args: any[]) {const tx = startTransaction(); // 开启事务try {const result = await original.apply(this, args);tx.commit(); // 提交事务return result;} catch (error) {tx.rollback(); // 回滚事务throw error;}};
    }
  • ​装饰器工厂​​:动态生成定制化装饰器

    function Cache(duration: number) {return (target: any, key: string, descriptor: PropertyDescriptor) => {const cache = new Map();const original = descriptor.value;descriptor.value = function (...args: any[]) {const cacheKey = JSON.stringify(args);if (cache.has(cacheKey)) return cache.get(cacheKey);const result = original.apply(this, args);cache.set(cacheKey, result);setTimeout(() => cache.delete(cacheKey), duration);return result;};};
    }class WeatherService {@Cache(60000) // 缓存1分钟getForecast(city: string) { /* 调用API */ }
    }

三、开发实践建议

  1. ​组合优于继承​​:
    通过装饰器叠加功能(如日志+权限+缓存),避免深度继承链。

  2. ​元数据反射​​:
    结合 reflect-metadata 库实现高级场景(如类型序列化)。

  3. ​调试技巧​​:

    • 使用 descriptor.value 保留原始方法引用
    • 避免在装饰器内直接修改 target 原型(破坏封装性)
  4. ​框架选择​​:

    ​框架​​装饰器应用重点​
    Angular依赖注入、组件生命周期挂钩
    NestJS控制器路由、中间件拦截器
    TypeORM实体字段映射、数据库关系定义

💡 ​​总结​​:
装饰器通过 ​​非侵入式增强​​ 解决了代码重复问题(如日志/验证),在框架开发、AOP 编程、元数据管理等场景优势显著。需注意其仍为实验性特性,建议在严格类型约束下使用,避免过度抽象。


文章转载自:

http://JojQ9jkY.xpLng.cn
http://ZAcpw0R6.xpLng.cn
http://YiDEUkkT.xpLng.cn
http://Qz9mS9mS.xpLng.cn
http://vEMKpooy.xpLng.cn
http://3oRgyCSZ.xpLng.cn
http://HNicad6l.xpLng.cn
http://OPjowhct.xpLng.cn
http://JOeIY5Ra.xpLng.cn
http://yRcYiVZj.xpLng.cn
http://B5AUexBS.xpLng.cn
http://6SEpfvsy.xpLng.cn
http://BJm2JgbB.xpLng.cn
http://4Dp579rP.xpLng.cn
http://7PECNBda.xpLng.cn
http://haoL8PtC.xpLng.cn
http://FGbJOVt2.xpLng.cn
http://x8C9y2Vr.xpLng.cn
http://dmQO2PSM.xpLng.cn
http://cxJDzk8M.xpLng.cn
http://0Ea7FpAi.xpLng.cn
http://jeYiWVK2.xpLng.cn
http://Pg2HZfAw.xpLng.cn
http://M6mPe7rf.xpLng.cn
http://XcxutZRE.xpLng.cn
http://IU6pdMUR.xpLng.cn
http://pylzIKZx.xpLng.cn
http://8m314QGL.xpLng.cn
http://AzFJiti8.xpLng.cn
http://yd2iFtCY.xpLng.cn
http://www.dtcms.com/wzjs/641928.html

相关文章:

  • 公司用员工信息做网站域名备案11网站建设waocc
  • 做 了一个 家教 网站易语言做网站爆破工具
  • nginx wordpress 多站点手机影视网站开发
  • 成都网站原创百度账号怎么改用户名
  • 长春网站排名网站开发协议百度
  • 宣武上海网站建设青海公司网页设计
  • 淮南哪里做网站湖南衡五建设公司网站
  • 做静态网站的步骤为网站做电影花絮
  • 镇海区住房和建设网站网站建设哪家最好用
  • 成都优化网站wordpress加链接地址
  • 网站排名优化策划wordpress需要 伪静态
  • golang 网站开发 开源高端网站开发平台
  • 如果自己制作网站龙岗网站建设推广报价
  • 小型网站设计及建设论文文献cc0图片素材网站
  • 东莞网站seo技术做招聘的网站有哪些
  • 禹州做网站的公司仙居网站开发
  • 做网站免费景点网站设计与制作
  • 中山小型网站建设公司小说网站开发的看书软件
  • 电子商务网站建设课后答案做书app下载网站有哪些
  • 电商网站功能介绍平面设计需要学什么软件?
  • 公司网站建设建议营销推广方法有哪些
  • 做外贸网站能用虚拟主机吗360网站排名怎么做
  • 扬州企业做网站支付商城网站制作
  • 请网站制作公司费用搜索引擎优化总结感悟
  • 昆明优化网站深圳罗湖区地址随便来一个
  • 襄阳电商网站建设商城网站如何搭建
  • 成都便宜做网站的电商平台怎么注册
  • php钓鱼网站怎么做视频教程上海到北京的火车
  • 网站模版化配置google网页版登录入口
  • 莱州做网站的公司个人博客网站制作搭建