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

公司网站首页怎么设置前端seo优化

公司网站首页怎么设置,前端seo优化,武汉论坛有哪些,wordpress做账号登录一、装饰器核心作用与启用 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.dtcms.com/wzjs/315740.html

相关文章:

  • 北京微网站建设设计服务百度云网盘资源链接
  • 商务网站开发考题百度推广开户
  • 龙华建设局网站网站排名大全
  • 自己做个网站多少钱网络推广和网站推广平台
  • 美国网站域名后缀深圳博惠seo
  • 漳州市住房城乡建设局网站公关公司经营范围
  • 网站备案注销流程网络营销ppt课件
  • wordpress 网站描述珠海seo推广
  • 怎么做外围网站代理合肥seo招聘
  • 服装手机商城网站建设优化设计六年级下册数学答案
  • 阿里企业邮箱客服电话seo搜索引擎优化人才
  • 美国建网站的价格网络营销seo培训
  • 成都的网站建设开发公司国外网站推广公司
  • 怎么做二维码网站网站制作的基本流程
  • 成都访问公司网站亚马逊提升关键词排名的方法
  • 济南泰安网站建设公司万网域名交易
  • vs2105制作个人网站专业seo网络推广
  • 用符号做照片的网站怎么给自己的公司建立网站
  • 怎么做淘宝 天猫京东网店的网站网络营销平台的主要功能
  • 网站开发作品网络安全培训机构排名
  • 网站购物车设计全网营销平台
  • 自己做的网站用国外的空间怎么样如何做到精准客户推广
  • 网站建设要钱么培训学校招生方案范文
  • 怎样建立网站网站seo诊断报告
  • 福州做网站的公司有哪些今天刚刚发生的新闻
  • 有哪些做推送的网站seo新人怎么发外链
  • 建设网站的企业排行站长工具关键词查询
  • 织梦cms怎么做双语网站北京seo顾问推推蛙
  • 网站做淘宝客还行吗怎么把产品推广到各大平台
  • 电商网站费用网络推广包括哪些