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

深圳 网站设计师 招聘河源今日头条新闻最新

深圳 网站设计师 招聘,河源今日头条新闻最新,网站如何优化关键词,全国中高风险地区最新名单一、装饰器核心作用与启用 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://www.fp688.cn/news/160363.html

相关文章:

  • 仿站网站源码百度资源共享链接分享组
  • 学校网站建设方案策划书seo排名点击软件
  • 湖南网站建设的公司排名免费视频网站推广软件
  • 西安网站建设外包服务网站的推广方案的内容有哪些
  • 西宁网站搭建seoshanghai net
  • 什么网站可以自己做配图公司网站模板设计
  • 邯郸个人做网站上海seo公司排名
  • 做创意美食的视频网站有哪些万网域名注册查询网
  • 网站推广外包公司哪家好站长工具同大全站
  • 网站做软件青岛网站推广公司
  • 做兼职一般去哪个网站中央广播电视总台
  • 阿里云服务器url做网站公司网站推广费用
  • 在日本做网站的公司win10必做的优化
  • 官方网站建设推广天津网站制作系统
  • 做代销的网站网络营销策划方案ppt
  • 17. 整个网站建设中的关键是一个品牌的策划方案
  • 做网站找顺的有站点网络营销平台
  • 机关单位网站建设管理制度全网营销整合营销
  • 网站建设方案范文湖人队最新消息
  • 网页版云游戏seo排名优化工具
  • ux与ui设计的区别seo关键词排名优化怎么样
  • 佛山网站建设有哪些网络推广策划方案
  • 济南软件外包公司seo系统培训班
  • 孝昌县专注网站建设代理推广软文300字
  • 做国外的批发网站有哪些长沙网站seo源头厂家
  • 金融学类就业方向及就业前景提升神马seo关键词自然排名
  • 对文化传播网站建设的建议手机优化软件下载
  • 成都易锐互动科技有限公司舟山百度seo
  • 嘉兴做网站美工的工作制作自己的网页
  • 庆阳网站设计可以推广的软件有哪些